我正在寻找一种可靠的跨平台方法来检查具有特定 pid 的进程是否正在运行。出现了两种可能的解决方案:
kill -0 $PID
— 如果进程存在,则退出状态为 0,如果不存在,则退出状态为 1,但对于需要额外权限才能终止的 pid,它也会返回 1。ps a | grep "^\s*${PID}"
和类似的东西都很丑陋。
有没有办法拥有像#1这样的东西,但没有所有者限制?
答案1
你能写一个小C程序吗?kill(2)
如果您的 UID 无权向给定进程发送信号,则系统调用确实返回 -1,但在这种情况下errno
设置为 -1 EPERM
,而不是ESRCH
针对不存在的 PID。我相当确定您可以使其在 Solaris、HP-UX、Linux 和 *BSD 之间移植。您必须为每个平台编译它。