Saya lebih suka solusi EDIT # 3 (lihat di bawah).
jika tidak dalam shell yang sama, gunakan loop sementara dengan kondisi pada ps -p mengembalikan true. Letakkan tidur di loop untuk mengurangi penggunaan prosesor.
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
atau jika UNIX Anda mendukung / proc (misalnya HP-UX masih tidak).
while [[ -d /proc/<pid> ]]
do
sleep 10
done
Jika Anda ingin batas waktu
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
EDIT # 1
Ada cara lain: jangan gunakan cron . Gunakan perintah batch untuk menumpuk pekerjaan Anda.
Misalnya Anda bisa setiap hari menumpuk semua pekerjaan Anda. Batch dapat disetel untuk memungkinkan beberapa paralelisme sehingga pekerjaan yang diblokir tidak akan menghentikan semua tumpukan (Itu tergantung pada sistem operasi).
EDIT # 2
Buat fifo di direktori home Anda:
$ mkfifo ~/tata
di akhir pekerjaan Anda:
echo "it's done" > ~/tata
di awal pekerjaan lain (orang yang menunggu):
cat ~/tata
Ini bukan polling, itu sudah lama memblokir IO.
EDIT # 3
Menggunakan sinyal:
Di awal skrip, siapa yang menunggu:
echo $$ >>~/WeAreStopped
kill -STOP $$
di akhir pekerjaan panjang Anda:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi