我想检测 Linux 中某个进程是否已死亡。假设该进程的 pid 为1234
。我可以通过测试 的存在来检查其 pid 是否正在使用/proc/1234/
。不过,该进程可能已死亡并且 pid 被重用。我可以检查inode
proc 中某个文件的 (例如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 作为第二个参数传递