Using while or until to wait until a PID doesn't exist

You should be simply doing:

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

The loop condition tests the exit status of the last command — in this case, kill. The -0 option (used in the question) doesn't actually send any signal to the process, but it does check whether a signal could be sent — and it can't be sent if the process no longer exists. (See the POSIX specification of the kill() function and the POSIX kill utility.)

The significance of 'last' is that you could write:

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

This too tests the exit status of kill (and kill alone).


Also you can do in unixes with procfs (almost all except mac os)

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

Tags:

Bash

Process