我想了解一个进程是否正在运行。我不想使用任何system("")命令。有没有基于C的函数可以让你知道一个进程是否正在运行?
我想提供进程名称并想知道它是否正在运行。
谢谢。
可以使用kill(2)
命令:
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
/proc
目录的内容。编号的目录是进程ID,而包含cmdline
文件的子目录显示命令的名称。/proc/1234/cmdline
包含值foo
,则进程foo
的ID为1234。您可以使用C中的标准文件访问函数以此方式将名称映射到PID。有关更多信息,请参见proc(5)
。您可能会对这个感兴趣:http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html
做这件事的“传统和最佳方式”是读取/proc
文件夹。您可以查看this question以获取更多信息,该问题引用了http://procps.sourceforge.net/,这可能会引起您的兴趣。
您可以扫描/proc
文件系统以获取所有当前正在运行的进程,并查看cmdline
条目是否与您想要的特定进程匹配。
但是,存在竞争条件。在您决定该进程正在运行之后,该进程可能会死亡。
确定您的进程是否仍在运行的可靠方法是成为启动该进程的人。然后,当子进程死亡时,您将收到SIGCHLD
,并且您可以使用waitpid(-1,..)
来找出哪个子进程已经死亡。