我有一个需要经常运行的 shell 脚本。
当 shell 脚本启动时,我想确保将进程 ID 记录到日志文件中。
如何使用记录的进程 ID 确保进程仍在运行。
如果您知道 pid,您可以专门向 ps 询问该进程以确定它是否正在运行。空响应意味着 pid 没有运行
ps PID
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
您可以使用ps
列出正在运行的进程
$ ps
PID TTY TIME CMD
1555 pts/1 00:00:00 bash
1596 pts/1 00:00:00 ps
由于您有 PID,因此您可以检查/proc/$PID/cmdline
以验证具有该 PID 的进程是否符合您的预期。您需要这样做以防止 PID 在翻转时被重用。
一种方法是 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 的进程是正确的进程还是只是另一个进程。请记住,您很容易获得僵尸进程的竞争条件和问题。
你可以top
用来监控进程
top -p <pid>