2012-07-11 13 views
5

Artık bir PID bulunana kadar beklemek için Bash kullanıyorum. İşe başarısız, veya süreç sona erdikten sonra döngü devam ya Bash: Bir PID bulunana kadar beklerken veya beklemeye kadar kullanma

#!/bin/bash 
while [ kill -0 PID > /dev/null 2>&1 ]; do 
    //code to kill process 
done 
//code to execute after process is dead 

yanı sıra

#!/bin/bash 
until [ ! kill -0 PID > /dev/null 2>&1 ]; do 
    //code to kill process 
done 
//code to execute after process is dead 

bu örneklerin her ikisi

denedim. Ne yanlış yapıyorum?

+0

sadece ' "$ PID"' bekle kullanılamaz (hemen hemen tüm mac os hariç) procfs ile Unixlerin yapabilirsiniz? –

+0

PID'nin kabuğun bir çocuğu olmadığını geri döndürür. – hexacyanide

+0

** İzlenmeyen süreç _a child process_ ise, birkaç tuzak var. Ayrıntılar için [bu yorum] konusuna bakın (http://stackoverflow.com/questions/1058047/wait-for-any-process-to-finish/1127675#comment24774342_1058047). –

cevap

15

Sadece yapıyor olması gerekir:

while kill -0 $PID >/dev/null 2>&1 
do 
    # Code to kill process 
done 

döngü koşulu kill, bu durumda son komutun — çıkış durumunu test eder.

'son' önemi

yazabilirsiniz olmasıdır:

while sleep 1 
     echo Testing again 
     kill -0 $PID >/dev/null 2>&1 
do 
    # Code to kill process 
done 

Bu da kill (ve kill yalnız) çıkış durumunu test eder. Ayrıca

+0

"-0" ifadesinin işlemi kontrol ettiğini açıklayan bir not eklemeye değer. Tam olarak sezgisel değil ... – Nagev

+0

Sanırım açık değil, ama OP'nin açıklamasını gerektirmemesi için soruda kullanıldı. –

4

Eğer

while test -d /proc/$PID; do 
    kill -$SIGNAL $PID 
    # optionally 
    sleep 0.2 
done 
+1

bu bir Mac üzerinde çalışmayacaktır – Somatik

+0

Mac'in procfs'ye sahip olmadığını fark etmedim. –

İlgili konular