检查进程是否在Unix中运行

时间:2013-10-11 15:36:15

标签: bash unix

我有一个我需要经常运行的shell脚本。

当shell脚本启动时,我想确保将进程ID记录到日志文件中。

如何使用记录的进程ID确保进程仍在运行。

6 个答案:

答案 0 :(得分:1)

如果您知道pid,您可以专门向ps询问该过程以确定它是否正在运行。空响应表示pid未运行

ps PID

答案 1 :(得分:0)

由于您拥有PID,因此可以检查/proc/$PID/cmdline以验证具有该PID的过程是否符合预期。您需要这样做以防止在翻转时重复使用PID。

答案 2 :(得分:0)

您可以使用top来监控流程

top -p <pid>

答案 3 :(得分:0)

您可以使用ps列出正在运行的进程

$ ps
  PID TTY          TIME CMD
 1555 pts/1    00:00:00 bash
 1596 pts/1    00:00:00 ps

答案 4 :(得分:0)

一种方法是grep ps的输出:

 PID=$(cat pid-file)
 if ps -o pid -ax | grep -s $PID ; then
     # action if still running
 fi

正如jman所写,您可以检查/proc/$PID/cmdline是否具有PID的过程是正确的过程还是只是另一个过程。请记住,您可以轻松地通过zombie processes.

获得竞争条件和问题

答案 5 :(得分:0)

如果PID正在运行,您可以“询问”命令ps

#!/bin/bash
pid=`cat /<path-to-the-lock-file>`
running=`ps -p $pid -o pid|head -n-1`
if [ "$running" != "" ]
then
    echo "Already running"
    exit 1
fi