Anchor(faq42)

How can I find out if a process is still running?

The kill command is used to send signals to a running process. As a convenience function, the signal "0", which does not exist, can be used to find out if a process is still running:

This is one of those questions that usually masks a much deeper issue. It's rare that someone wants to know whether a process is still running simply to display a red or green light to an operator.

NOTE: Anything you do that relies on PIDs to identify a process is inherently flawed. If a process dies, the meaning of its PID is UNDEFINED. Another process started afterward may take the same PID as the dead process. That would make the previous example think that the process is still alive (its PID exists!) even though it is dead and gone. It is for this reason that nobody should try to manage processes other than the parent of that process. Read the link at the end of this FAQ.

More often, there's some ulterior motive, such as the desire to ensure that some daemon which is known to crash frequently is still running. If this is the case, the best course of action is to fix the program or its configuration so that it stops dying, rather than merely restarting it each time it dies. If you can't do that, then use something like this:

until myprog
do
    echo "ERROR: myprog terminated with exit code: $?.  Restarting .."
    sleep 1
done

This piece of code will restart myprog if it terminates with an exit code other than 0 (indicating something went wrong). If the exit code is 0 (successfully shut down) the loop ends. The latter case generally speaking happens only when you instruct the program to shut down, in which case you don't want it to restart itself automatically.

For a much better discussion of these issues, see ProcessManagement or [:BashFAQ#faq33:FAQ #33].