用于检查PID是否被僵尸的便携式shell解决方案

Jas*_*son 25 unix shell pid sh

我想检查PID是否正在运行(即存在并且没有被僵尸).

它真的很快,/proc/$PID/stat但我想要一些更便携的东西.

我现在最好的是:

( STAT="$(ps -ostat= -p$PID)"; test "$STAT" -a "$STAT" "!=" "Z" )
Run Code Online (Sandbox Code Playgroud)

这似乎适用于BSD和Linux.有没有更好的办法?

hai*_*pie 1

希望符合 POSIX 标准。用破折号测试。要使用它,请使用您最喜欢的编辑器保存它,使其可执行 ( chmod 755 foo.sh),然后使用 PID 参数运行它。

当然,您可以根据需要进行调整。

#!/bin/sh
pid="$1";
psout=$(ps -o s= -p "$pid");
pattern='[SRDTWX]';

case "$psout" in 
    $pattern) echo "Not a zombie";;
    Z) echo "Zombie found";;
    *) echo "Incorrect input";; 
esac
Run Code Online (Sandbox Code Playgroud)