9

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

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

谢谢,

4

4 回答 4

12

当然,使用kill(2)

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

 int kill(pid_t pid, int sig);

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

因此,只需调用kill(pid, 0)您要检查的进程的进程 ID 并查看是否收到错误 ( ESRCH)。

于 2012-08-02T21:21:42.253 回答
2

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

例如,如果/proc/1234/cmdline包含 value foo,则 processfoo的 ID 为 1234。您可以使用 C 中的标准文件访问函数将名称映射到 PID。有关proc(5)更多信息,请参阅。

于 2012-08-02T21:29:53.907 回答
1

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

执行此操作的“常规和最佳方法”是阅读/proc文件夹。您可以查看此问题以了解更多信息,其中引用了http://procps.sourceforge.net/,您可能会感兴趣

于 2012-08-02T21:30:37.610 回答
0

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

但是,有一个竞争条件。在您决定它正在运行后,该进程可能会终止。

确定您的进程是否仍在运行的可靠方法是成为启动该进程的方法。然后,当一个孩子死了,你会得到SIGCHLD,你可以waitpid(-1,..)用来找出哪个孩子死了。

于 2012-08-02T21:28:34.253 回答