Check if process exists given its pid

后端 未结 6 1273
孤独总比滥情好
孤独总比滥情好 2020-12-01 02:06

Given the pid of a Linux process, I want to check, from a C program, if the process is still running.

6条回答
  •  一生所求
    2020-12-01 02:33

    Issue a kill(2) system call with 0 as the signal. If the call succeeds, it means that a process with this pid exists.

    If the call fails and errno is set to ESRCH, a process with such a pid does not exist.

    Quoting the POSIX standard:

    If sig is 0 (the null signal), error checking is performed but no signal is actually sent. The null signal can be used to check the validity of pid.

    Note that you are not safe from race conditions: it is possible that the target process has exited and another process with the same pid has been started in the meantime. Or the process may exit very quickly after you check it, and you could do a decision based on outdated information.

    Only if the given pid is of a child process (fork'ed from the current one), you can use waitpid(2) with the WNOHANG option, or try to catch SIGCHLD signals. These are safe from race conditions, but are only relevant to child processes.

提交回复
热议问题