【问题标题】:Check running processes in C在 C 中检查正在运行的进程
【发布时间】:2011-03-28 14:45:52
【问题描述】:

谁能告诉我如何检查具有给定进程 ID 的 unix 进程是否在 C 程序中运行。我知道我可以调用 system() 并使用 ps 命令,但我不想调用 system()。

【问题讨论】:

  • 不是重复的。这个问题是关于检查特定进程ID,另一个问题是关于列出所有进程。 (Juliano 的出色回答不适用于其他问题。)
  • @EdwinBuck 请考虑取消删除您的正确答案,如果不是完全可移植的答案(在 /proc 可用的系统上,它将提供对有助于消歧的信息的访问,而在其他“ps”必须得到这是来自某个地方的信息)

标签: c unix


【解决方案1】:

使用kill(2)

if (kill(pid, 0) == 0) {
    /* process is running or a zombie */
} else if (errno == ESRCH) {
    /* no such process with the given pid is running */
} else {
    /* some other error... use perror("...") or strerror(errno) to report */
}

【讨论】:

  • 简单。优雅的。详尽无遗。 +1。
  • 除非该进程是调用进程的子进程,否则也没有用。 只要完成的进程被其父进程waited 后,PID 就可以被重用,因此如果存在给定 PID 的进程,则不能保证它是您认为的进程,除非您重新父(然后您已经知道它的 pid 是否由 wait-family 函数返回)。
  • @R.. PID 可以重复使用,但大多数实现都避免使用最近使用的 PID。相反,除非数字溢出,否则内核会继续为 PID 选择更高的数字。
  • @R.. 那么你的问题是问题,而不是我的答案。 Sachin 很清楚,他有一个进程 ID,并想检查它是否正在运行。简单的问题,简单的答案。您应该将您对比赛条件以及他到底想做什么的担忧添加到他的问题中,而不是我的回答中。
  • 很公平。您的答案是该问题的正确答案,因此我对其进行了 +1。不过,我确实认为,如果它也提到这个问题是有问题的,那会更好一些。
猜你喜欢
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多