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를 재사용하는 일이 발생합니까? 이 경우 참조된 스크립트는 프로세스가 프로그램을 실행하고 있다고 잘못 생각합니다.

감사해요.

관련 정보