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

Mis*_*iev 2 process kill process-management

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

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

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

Bru*_*ger 5

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