如何find一个进程在C中运行?

我想知道一个进程是否正在运行。 我不想使用任何系统(“”)命令。 有没有任何基于C的function,让你知道如果一个进程正在运行?

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

谢谢,

Solutions Collecting From Web of "如何find一个进程在C中运行?"

当然,使用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 )。

在Linux上,另一种方法可能包括检查/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文件夹。 你可以看到更多的这个问题 ,其中引用http://procps.sourceforge.net/ ,这可能是你感兴趣的

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

但是,有一个竞争条件。 这个过程可能会在您决定运行后死亡。

知道你的流程是否仍在运行的确定的方法就是启动流程。 那么,当一个孩子死亡,你会得到SIGCHLD ,你可以使用waitpid(-1,..)来找出哪个孩子死亡。