我想知道一个进程是否正在运行。我不想使用任何系统(“”)命令。是否有任何基于 C 的函数可以让您知道进程是否正在运行?
我想提供进程名称并想知道它是否正在运行。
谢谢,
当然,使用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
)。
在 Linux 上,另一种方法可能包括检查/proc
目录的内容。编号的目录是进程 ID,而包含cmdline
文件的子目录显示命令的名称。
例如,如果/proc/1234/cmdline
包含 value foo
,则 processfoo
的 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,..)
用来找出哪个孩子死了。