0

To use a pid file for ensuring singleton running instance of a program, I thought that when a process finishes running the program, it should remove the pid file, until I know it doesn't when reading 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}"

Here's how it works: The script first checks to see if the PID file exists ("[ -e "${PIDFILE}" ]". If it does not, then it will start the program in the background, write its PID to a file ("echo $! > "${PIDFILE}""), and exit. If the PID file instead does exist, then the script will check your own processes ("ps -u $(whoami) -opid=") and see if you're running one with the same PID ("grep -P "^\s*$(cat ${PIDFILE})$""). If you're not, then it will start the program as before, overwrite the PID file with the new PID, and exit. I see no reason to modify the script

Does the above script assume that no pid is recycled?

Can it happen that a process finishes running the program, and its pid is reused by a new process running a different program? In such a case, the quoted script will falsely think that a process is running the program.

Thanks.

3
  • 1
    That piece of code is flawed in several ways, and not removing the PID file is just one of them. There are also race conditions, and that ps | grep looks awkward. Consider using a lock directory rather than a lock file. See e.g. unix.stackexchange.com/questions/401415/… Commented Oct 30, 2018 at 18:24
  • I originally thought that ensuring singleton instance of running a program is based on testing existing of a lock file, or someway entirely dependent on the lock files. When I read that reply and also another reply using flock, I found that both ways don't remove the lock files. Is removing a lock file not recommended in general? I also asked if we can tell if a process is running a program by only looking at the lock file unix.stackexchange.com/q/478712/674 Commented Oct 30, 2018 at 18:32
  • related on SO: Are PID-files still flawed when doing it 'right'? Commented Oct 30, 2018 at 18:34

0

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.