Given a pid, how can I tell if it's a running program?

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 of errno





    • 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