-2

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

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

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

4

6 回答 6

1

如果您知道 pid,您可以专门向 ps 询问该进程以确定它是否正在运行。空响应意味着 pid 没有运行

ps PID

于 2013-10-11T15:42:10.440 回答
0

ps如果具有 PID 的进程正在运行,您可以“询问”命令:

#!/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
于 2013-10-11T15:53:27.350 回答
0

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

$ ps
  PID TTY          TIME CMD
 1555 pts/1    00:00:00 bash
 1596 pts/1    00:00:00 ps
于 2013-10-11T15:41:32.947 回答
0

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

于 2013-10-11T15:39:00.850 回答
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 的进程是正确的进程还是只是另一个进程。请记住,您很容易获得僵尸进程的竞争条件和问题。

于 2013-10-11T15:42:55.657 回答
0

你可以top用来监控进程

top -p <pid>
于 2013-10-11T15:39:42.320 回答