假设 pid 不可用,pid 文件是否可以工作?

假设 pid 不可用,pid 文件是否可以工作?

为了使用 pid 文件来确保程序的单例运行实例,我认为当进程完成运行程序时,它应该删除 pid 文件,直到我知道在读取时它不会https://stackoverflow.com/a/7453411/156458:

#!/bin/bash

mkdir -p "$HOME/tmp"
PIDFILE="$HOME/tmp/myprogram.pid"

if [ -e "${PIDFILE}" ] && (ps -u $(whoami) -opid= |
                           grep -P "^\s*$(cat ${PIDFILE})$" &> /dev/null); then
  echo "Already running."
  exit 99
fi

/path/to/myprogram > $HOME/tmp/myprogram.log &

echo $! > "${PIDFILE}"
chmod 644 "${PIDFILE}"

它的工作原理如下:脚本首先检查 PID 文件是否存在(“ [ -e "${PIDFILE}" ]”。如果不存在,则它将在后台启动程序,将其 PID 写入文件(“ echo $! > "${PIDFILE}"”),然后退出。如果相反,PID 文件确实存在,那么脚本将检查您自己的进程 (" ps -u $(whoami) -opid="),并查看您是否正在运行具有相同 PID 的进程 (" grep -P "^\s*$(cat ${PIDFILE})$""),如果不存在,那么它将像以前一样启动程序。 ,用新的 PID 覆盖 PID 文件,然后退出我认为没有理由修改脚本。

上面的脚本是否假设没有pid被回收?

是否会发生这样的情况:一个进程运行完程序后,它的 pid 被一个运行不同程序的新进程重用?在这种情况下,引用的脚本会错误地认为一个进程正在运行该程序。

谢谢。

相关内容