I Kesinlikle EDIT # 3 çözümünü tercih edin (aşağıya bakınız).
aynı kabuk içinde değilse ps-p doğru koşulu ile bir while döngüsü kullanın . İşlemci kullanımını azaltmak için döngüye bir uyku koyun .
while ps -p <pid> >/dev/null 2>&1
do
sleep 10
done
veya UNIX'iniz / proc destekliyorsa (örneğin HP-UX hala desteklemiyorsa).
while [[ -d /proc/<pid> ]]
do
sleep 10
done
Zaman aşımı istiyorsanız
timeout=6 # timeout after 1mn
while ((timeout > 0)) && ps -p <pid> >/dev/null 2>&1
do
sleep 10
((timeout -= 1))
done
DÜZENLEME # 1
Başka bir yol var: cron kullanma . İşlerinizi yığınlamak için toplu iş komutunu kullanın .
Örneğin günlük olarak tüm işlerinizi istifleyebilirsiniz. Toplu işlem bazı paralelliğe izin verecek şekilde ayarlanabilir, böylece engellenen bir iş tüm yığını durdurmaz (İşletim sistemine bağlıdır).
DÜZENLEME # 2
Ana dizininizde bir fifo oluşturun:
$ mkfifo ~/tata
işinizin sonunda:
echo "it's done" > ~/tata
diğer işin başlangıcında (bekleyen kişi):
cat ~/tata
Yoklama değil eski iyi engelleme IO.
EDIT # 3
Sinyalleri kullanma:
Bekliyor kim (ler) başında:
echo $$ >>~/WeAreStopped
kill -STOP $$
uzun işinizin sonunda:
if [[ -f ~/WeAreStopped ]] ; then
xargs kill -CONT < ~/WeAreStopped
rm ~/WeAreStopped
fi