Saya sedang menulis skrip, tetapi ada sesuatu yang saya butuhkan sehingga saya tidak dapat menemukan cara untuk melakukannya ...
Saya perlu membuat perintah di latar belakang "command1 &" dan kemudian di suatu tempat dalam skrip saya harus menunggu sampai selesai sebelum saya melakukan command2. Pada dasarnya, saya membutuhkan ini:
CATATAN: setiap perintah berjalan di direktori tertentu! pada akhir while loop my command1 menciptakan 4 direktori, di mana di masing-masing menjalankan proses tertentu sehingga total proses yang berjalan adalah 4
a=1
while [$a -lt 4 ]
. command1
#Generates 1 Process
a= `export $a +1`
done
#Wait until the 4 process end and then run the command2
. command2
Saya telah melihat sesuatu tentang wait
perintah dengan nomor proses pid, tetapi itu tidak berhasil juga.
shell
scripting
background-process
Joao Macau
sumber
sumber
command1
? Bisakah Anda memodifikasinya sehingga mengembalikan PID dari 4 proses?$!
variabel untuk mendapatkan ini, meneruskannya kewait
perintah seperti yang saya tunjukkan di sana.$!
berisi PID latar belakang terakhir, sementara$$
berisi PID proses proses terakhir.Jawaban:
Anda dapat menggunakan perintah
wait PID
untuk menunggu proses berakhir.Anda juga dapat mengambil PID dari perintah terakhir dengan
$!
Dalam kasus Anda, sesuatu seperti ini akan bekerja:
Mengikuti hasil edit Anda, karena Anda memiliki beberapa PID dan Anda mengetahuinya, Anda dapat melakukannya:
sumber
Cara paling bersih untuk melakukan ini adalah dengan
comamnd1
mengembalikan PID Anda dari proses yang diluncurkan dan menggunakannyawait
pada masing-masing seperti yang disarankan oleh jawaban @ LaurentC .Pendekatan lain akan seperti ini:
sumber
Jika Anda menggunakan metode berikut, Anda mungkin tidak perlu "tunggu semua proses" khusus setelah loop sementara. Loop akan menunggu arus
command1
untuk menyelesaikan sebelum siklus kembali ke atas. Harap berhati-hati dengan saran apa pun. Perhatikan, satu-satunya hal yang saya lakukan adalah menambah& wait $!
akhir Andacommand1
.sumber