如何从 bash 确定命令是否正在运行

如何从 bash 确定命令是否正在运行

我想在每次结束时重新运行文件 php......

然后我创建了像这样的文件 SH

VAR_1=1;

while [[ $VAR_1 != "2" ]]; do

    for filename in *.php; do

        if [ -- check if command is NOT running -- ]; then
            sleep .5
            php $filename
        fi

    done
done

我必须使用什么样的 IF?

答案1

使用pgrep

if ! pgrep -f "php $filename"; then echo "command not running"; fi

但是,“我希望每次结束时都重新运行文件 php”,那么为什么不这样做呢:

while true; do
    php "$filename"
done

那么您不必搜索它,当它结束时它就会再次运行。

答案2

( readlink /proc/*/exe | grep -q '/path/to/the/command' )

如果进程正在运行,将返回 0 /path/to/the/command

然而,实现这一目标的规范方法有点不同:

  • 在启动时,该进程会检查某些已知文件(通常是/run/$commandname.pid)是否存在
  • 如果是,它会读取其中的 PID,并检查该进程是否仍在运行(例如,是否有一个/proc/$pid/目录)
  • 如果是,则退出
  • 否则(没有 PID 文件,或者进程不再运行),它会将自己的 PID 写入文件中并启动。

相关内容