如何查找进程是否在C中运行?

时间:2012-08-02 21:16:57

标签: c linux process

我想知道进程是否正在运行。我不想使用任何系统(“”)命令。是否有任何基于C的函数可以让您知道进程是否正在运行?

我想提供进程名称,并想知道它是否正在运行。

谢谢,

4 个答案:

答案 0 :(得分:11)

当然,请使用kill(2)

 #include <sys/types.h>
 #include <signal.h>

 int kill(pid_t pid, int sig);
  

如果sig为0,则不发送信号,但仍然执行错误检查;这可用于检查是否存在进程ID或进程组ID。

因此,只需在要检查的流程的流程ID上调用kill(pid, 0),然后查看是否收到错误(ESRCH)。

答案 1 :(得分:2)

在Linux上,另一种方法可能包括检查/proc目录的内容。编号目录是进程ID,而包含cmdline文件的子目录显示命令的名称。

例如,如果/proc/1234/cmdline包含值foo,则进程foo的ID为1234.您可以使用C中的标准文件访问函数以这种方式将名称映射到PID 。有关详细信息,请参阅proc(5)

答案 2 :(得分:1)

你可能会觉得这很有趣:http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c.html

执行此操作的“常规和最佳方式”是阅读/proc文件夹。您可以查看this question了解更多信息,参考http://procps.sourceforge.net/,您可能感兴趣

答案 3 :(得分:0)

您可以扫描所有当前正在运行的进程的/proc文件系统,并查看cmdline条目是否符合您对该特定进程的要求。

然而,存在竞争条件。在您确定它正在运行后,该过程可能会死亡。

了解您的流程是否仍在运行的确定方法是启动流程。然后,当孩子死亡时,您将获得SIGCHLD,并且您可以使用waitpid(-1,..)找出哪个孩子死亡。