2013-07-27 15 views
10

Po uruchomieniu serwera tcp ze skryptu bash, muszę zabić poprzednie wystąpienie (które wciąż może nasłuchiwać tego samego portu) tuż przed rozpoczęciem odtwarzania bieżącej instancji.Zabij proces i czekaj na zakończenie procesu

Mogę użyć czegoś takiego jak pkill <previous_pid>. Jeśli rozumiem to poprawnie, po prostu wysyła SIGTERM do pid docelowy. Po powrocie pkill proces docelowy może nadal być żywy. Czy jest jakiś sposób, aby poczekać, aż zniknie?

+1

można zrobić to samo pytanie, ale w [unix.se] witrynie? – Braiam

+0

Oto moje rozwiązanie, które działa również dla usług: http://pastebin.com/VjpVNdz2. –

+0

Dlaczego ten "wyłączony temat"? Jest to pytanie programistyczne związane z językiem programowania bash. – h22

Odpowiedz

5

Zastosowanie wait (bash wbudowane) czekać na zakończenie procesu:

pkill <previous_pid> 
wait <previous_pid> 
+12

wait powiedział "nie jest pid z tej powłoki", musiałem 'podczas gdy ps -p $ nPid; spać 1; done; ' –

+6

-1:' wait' działa tylko dla dzieci _current shell_, a nie dowolnych procesów. Nie ma w tym celu ogólnego mechanizmu wbudowanego. –

Powiązane problemy