Kill a process and wait for the process to exit

woodings picture woodings · Jul 27, 2013 · Viewed 28.2k times · Source

When I start my tcp server from my bash script, I need to kill the previous instance (which may still be listening to the same port) right before the current instance starts listening.

I could use something like pkill <previous_pid>. If I understand it correctly, this just sends SIGTERM to the target pid. When pkill returns, the target process may still be alive. Is there a way to let pkill wait until it exits?

Answer

Aaron Digulla picture Aaron Digulla · Mar 26, 2015

No. What you can do is write a loop with kill -0 $PID. If this call fails ($? -ne 0), the process has terminated:

while kill -0 $PID; do 
    sleep 1
done

(kudos to qbolec for the code)

Related: