Given a pid, how can I tell if it's a running program?
Use kill()
with 0 for the signal number.
There are four possible results from this call:
-
kill()
returns 0
-
this implies that a process exists with the given PID, and the system
would allow you to send signals to it. It is system-dependent whether
the process could be a zombie.
-
-
kill()
returns @math{-1},errno == ESRCH
-
either no process exists with the given PID, or security enhancements
are causing the system to deny its existence. (On some systems, the
process could be a zombie.)
-
-
kill()
returns @math{-1},errno == EPERM
-
the system would not allow you to kill the specified process. This
means that either the process exists (again, it could be a zombie) or
draconian security enhancements are present (e.g. your process is not
allowed to send signals to anybody).
-
-
kill()
returns @math{-1}, with some other value oferrno
-
you are in trouble!
-
The most-used technique is to assume that success or failure with
EPERM
implies that the process exists, and any other error
implies that it doesn't.
An alternative exists, if you are writing specifically for a system (or
all those systems) that provide a `/proc' filesystem: checking for
the existence of `/proc/PID' may work.
Home | FAQ |