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 -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 -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 -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.
Read more on Explain kill() and its possible return values…
