我想知道进程是否正在运行。我不想使用任何系统(“”)命令。是否有任何基于C的函数可以让您知道进程是否正在运行?
我想提供进程名称,并想知道它是否正在运行。
谢谢,
答案 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,..)
找出哪个孩子死亡。