Linux:如何检测进程的死亡?

Linux:如何检测进程的死亡?

我想检测 Linux 中某个进程是否已死亡。假设该进程的 pid 为1234。我可以通过测试 的存在来检查其 pid 是否正在使用/proc/1234/。不过,该进程可能已死亡并且 pid 被重用。我可以检查inodeproc 中某个文件的 (例如proc/1234/cmdline)是否相同,并希望新进程将获得不同的值。

有没有更好的方法来可靠地检测进程的死亡?

答案1

/proc/%d/stat如果 PID 当前存在,您可以解析它,这将为您提供有关该进程的信息。这适用于任何 Linux 系统,但不适用于其他 unix 系统。

要解析文件,请找到最后一个)字符。它后面会跟着一个空格和进程的当前状态。也许您不关心状态,也许您关心状态是否Z意味着进程已死亡但父进程尚未收集状态。

进一步查看数据中的 19 个字段,您将找到进程的启动时间。如果 PID 已被回收,则启动时间已更改。以下是仅打印启动时间的示例命令行:

cat /proc/2272/stat | sed -e 's/.*) //' | cut -f20 -d' '

答案2

如果你知道进程的名称,那么你可以

ps aux | grep <name> | grep -v grep

不确定这是否是您要找的,但这就是我对您的问题的解释。

答案3

实际上你可以将两者结合起来。如果你知道进程的名称和它最初使用的 pid,pgrep 将返回进程的 pid 列表,你可以检查。

#!/bin/bash

PIDS=`pgrep $1`

for PID in ${PIDS[@]}
do
    if [ "$2" == "${PID}" ]
    then
        echo "Still running!"
        exit 1
    fi
done

echo "Not found"
exit 0

将进程名称作为第一个参数传递,将 PID 作为第二个参数传递

相关内容