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 wait
Anda 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
wait
lebih 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 &
nohup
tidak 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 command
menulis output, bagaimana Anda bisa tahu kapan output berakhir dengan memonitor output itu?
lsof
untuk melihat apakah nohup
masih menggunakan nohup.out
, tapi saya setuju ini adalah metode yang sangat berbulu.
command
mulai berjalan, nohup
hilang. (1) Ya, saya mengulangi angka, karena saya mengulangi apa yang saya katakan dua tahun lalu: nohup
tidak menulis apa pun nohup.out
. (5) Ya, Anda bisa menulis skrip shell untuk diulang dan dijalankan lsof
untuk melihat apakah nohup.out
masih 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.out
file? Anda benar-benar ingin memeriksa apakah proses khusus ini nohup.out
terbuka. (7) Tetapi, jika Anda akan melakukannya, mengapa tidak memeriksa saja apakah prosesnya berjalan?