2013-07-27 14 views
10

Quando avvio il server tcp dal mio script bash, devo eliminare l'istanza precedente (che potrebbe ancora essere in ascolto sulla stessa porta) subito prima dell'inizio dell'istanza corrente.Uccidere un processo e attendere l'uscita del processo

Potrei usare qualcosa come pkill <previous_pid>. Se ho capito bene, questo semplicemente invia SIGTERM al pid di destinazione. Quando viene restituito il numero pkill, il processo di destinazione potrebbe essere ancora vivo. C'è un modo per far aspettare pkill finché non esce?

+1

Potrebbe fare la stessa domanda, ma in [unix.se] sito? – Braiam

+0

Ecco la mia soluzione che funziona anche per i servizi: http://pastebin.com/VjpVNdz2. –

+0

Perché questo "fuori tema"? È una domanda di programmazione pertinente al linguaggio di programmazione bash. – h22

risposta

5

Usa wait (bash built-in) di attesa per il completamento del processo:

pkill <previous_pid> 
wait <previous_pid> 
+12

wait ha detto "non è un pid di questa shell", ho dovuto 'while ps -p $ nPid; do sleep 1; done; ' –

+6

-1:' wait' funziona solo per i bambini della _corrente corrente_, non processi arbitrari. Non esiste un meccanismo integrato generale per questo. –