Jawaban:
Kuncinya adalah perintah "tunggu":
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
Dengan waitAnda dapat memiliki rincian yang Anda butuhkan:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Inilah salah satu cara untuk melakukannya:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waitlebih cocok untuk itu?
Anda dapat menjalankan proses Anda dengan nohup dan menulis skrip shell untuk membaca file nohup.out yang digunakan nohup untuk login.
nohup command &
nohuptidak menulis apa pun untuk nohup.out; itu hanya membuat file, dan mengarahkan output dari perintah itu. (2) Jika perintah tidak menghasilkan keluaran apa pun, tidak ada yang akan ditulis nohup.out, dan gagasan ini tidak berjalan dengan cepat. (3) Sekalipun commandmenulis output, bagaimana Anda bisa tahu kapan output berakhir dengan memonitor output itu?
lsofuntuk melihat apakah nohupmasih menggunakan nohup.out, tapi saya setuju ini adalah metode yang sangat berbulu.
commandmulai berjalan, nohuphilang. (1) Ya, saya mengulangi angka, karena saya mengulangi apa yang saya katakan dua tahun lalu: nohuptidak menulis apa pun nohup.out. (5) Ya, Anda bisa menulis skrip shell untuk diulang dan dijalankan lsofuntuk melihat apakah nohup.outmasih terbuka. Tetapi itu akan menjadi jawaban yang berbeda. (6) Bahkan jika Anda melakukan itu, itu tidak dapat diandalkan. Bagaimana jika beberapa proses lain membuka nohup.outfile? Anda benar-benar ingin memeriksa apakah proses khusus ini nohup.outterbuka. (7) Tetapi, jika Anda akan melakukannya, mengapa tidak memeriksa saja apakah prosesnya berjalan?