프로그램의 싱글톤 실행 인스턴스를 보장하기 위해 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를 재사용하는 일이 발생합니까? 이 경우 참조된 스크립트는 프로세스가 프로그램을 실행하고 있다고 잘못 생각합니다.
감사해요.