跨平台(Linux、BSD、Solaris)检查 pid 是否存在的方法

跨平台(Linux、BSD、Solaris)检查 pid 是否存在的方法

我正在寻找一种可靠的跨平台方法来检查具有特定 pid 的进程是否正在运行。出现了两种可能的解决方案:

  1. kill -0 $PID— 如果进程存在,则退出状态为 0,如果不存在,则退出状态为 1,但对于需要额外权限才能终止的 pid,它也会返回 1。
  2. ps a | grep "^\s*${PID}"和类似的东西都很丑陋。

有没有办法拥有像#1这样的东西,但没有所有者限制?

答案1

你能写一个小C程序吗?kill(2)如果您的 UID 无权向给定进程发送信号,则系统调用确实返回 -1,但在这种情况下errno设置为 -1 EPERM,而不是ESRCH针对不存在的 PID。我相当确定您可以使其在 Solaris、HP-UX、Linux 和 *BSD 之间移植。您必须为每个平台编译它。

相关内容