O trabalho do arquivo pid assumindo que o pid não é utilizável?

0

Para usar um arquivo pid para garantir a execução única de um programa, pensei que quando um processo terminar de executar o programa, ele deve remover o arquivo pid, até que eu saiba quando ele estiver lendo link :

#!/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

O script acima assume que nenhum pid é reciclado?

Pode acontecer que um processo termine a execução do programa e seu pid seja reutilizado por um novo processo executando um programa diferente? Nesse caso, o script citado irá falsamente pensar que um processo está executando o programa.

Obrigado.

    
por Tim 30.10.2018 / 19:17

0 respostas

Tags