Yanıtlar:
Anahtar "wait" komutudur:
#!/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 $!;
İle waitsen ayrıntı düzeyini olabilir İhtiyacınız:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
İşte bunu yapmanın bir yolu:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waitbunun için daha uygun?
İşleminizi nohup ile çalıştırabilir ve nohup'un günlüğe kaydettiği nohup.out dosyasını okumak için kabuk betiği yazabilirsiniz.
nohup command &
nohupolanlara hiçbir şey yazmaz nohup.out; yalnızca dosyayı oluşturur ve komutun çıktısını ona yeniden yönlendirir. (2) Komut herhangi bir çıktı üretmezse, hiçbir şey yazılmaz nohup.outve bu fikir hiçbir yere hızlı gitmez. (3) commandYazma çıktısı olsa bile , çıktının izlenmesiyle ne zaman biteceğini nasıl söyleyebilirsiniz?
lsofgörmek için çıktıyı kontrol ederek , ancak bunun çok kıllı bir yöntem olduğunu kabul ediyorum. nohupnohup.out
commandçalışmaya başladığında nohup, gitti. (1) Evet, bir sayıyı tekrarlıyorum, çünkü iki yıl önce söylediklerimi tekrarlıyorum: nohuphiçbir şey yazmıyor nohup.out. (5) Evet, hala açık lsofolup olmadığını görmek için döngü ve çalıştırma için bir kabuk betiği yazabilirsiniz nohup.out. Ancak bu farklı bir cevap olurdu. (6) Bunu yapsanız bile, güvenilmez olacaktır. Ya başka bir işlem nohup.outdosyayı açtıysa? Bu sürecin nohup.outaçık olup olmadığını gerçekten kontrol etmek istersiniz . (7) Ancak, bunu yapacaksanız, neden sadece sürecin çalışıp çalışmadığını kontrol etmiyorsunuz?