检查C中的运行进程

Sac*_*iya 10 c unix

有人可以告诉我如何检查具有给定进程ID的unix进程是否在C程序中运行.我知道我可以调用system()并使用ps命令,但我不想调用system().

Jul*_*ano 30

使用kill(2):

if (kill(pid, 0) == 0) {
    /* process is running or a zombie */
} else if (errno == ESRCH) {
    /* no such process with the given pid is running */
} else {
    /* some other error... use perror("...") or strerror(errno) to report */
}
Run Code Online (Sandbox Code Playgroud)

  • 除非进程是调用进程的子进程,否则也无用.一旦完成的进程被其父进程"等待",PID就可以被重用*,所以如果存在给定PID的进程,则不能保证它是你认为的进程,除非你是父进程(和然后你已经知道它的pid是否由`wait`-family函数返回). (4认同)
  • 简单.优雅.无遗.+1. (2认同)
  • @R ..然后你的问题是问题,而不是我的答案.Sachin很清楚,他有一个进程ID,想检查它是否正在运行.简单的问题,简单的答案.您应该添加您对竞争条件的疑虑以及他想对他的问题做些什么,而不是我的答案. (2认同)