Saya mencoba membuat skrip yang akan memulai banyak perintah latar belakang. Untuk setiap perintah latar belakang saya perlu mendapatkan kode kembali.
Saya telah mencoba skrip berikut:
#!/bin/bash
set -x
pid=()
return=()
for i in 1 2
do
echo start $i
ssh mysql "/root/test$i.sh" &
pid[$i]=$!
done
for i in ${#pid[@]}
do
echo ${pid[$i]}
wait ${pid[$i]}
return[$i]=$?
if [ ${return[$i]} -ne 0 ]
then
echo mail error
fi
done
echo ${return[1]}
echo ${return[2]}
Masalah saya adalah selama loop menunggu, jika pid kedua selesai sebelum yang pertama, saya tidak akan bisa mendapatkan kode kembali.
Saya tahu bahwa saya bisa menjalankan menunggu pid1 pid2, tetapi dengan perintah ini saya tidak bisa mendapatkan kode kembali dari semua perintah.
Ada ide ?
Jawaban Stéphane bagus, tapi saya lebih suka
yang akan mengulangi kunci
pid
array, terlepas dari entri mana yang masih ada, sehingga Anda dapat mengadaptasinya, keluar dari loop, dan memulai kembali seluruh loop dan itu hanya akan bekerja. Dan Anda tidak perlu nilai berturut-turuti
untuk memulai.Tentu saja, jika Anda berurusan dengan ribuan proses maka mungkin pendekatan Stépane akan lebih efisien jika Anda memiliki daftar yang tidak jarang.
sumber