Você está correto ao suspeitar que há um problema (pequeno!) de atomicidade.
Não importa qual método você use, seja um utilitário padrão do sistema como start-stop-daemon
, um arquivo PID roll-your-own, usando pkill
para consultar e matar por ID do usuário, por binário executável ou qualquer outra coisa, há sempre um intervalo entre descobrir qual processo você quer matar e dar a ID do processo à chamada do sistema kill
para enviar um sinal.
Basicamente, você não deve se preocupar com isso. Para ter problemas, ambos dos seguintes itens teriam que acontecer:
- O processo de destino morre entre o momento em que você identifica seu ID de processo e a hora em que você realmente o elimina.
- Os IDs do processo para o processo recém-criado precisariam, durante o mesmo intervalo de tempo, circular para reutilizar o ID do processo que acabou de ser desocupado.
É muito improvável.
Observe que, no caso específico em que você está estudando, você realmente tem uma maneira de se proteger contra isso. O único processo executado pelo usuário nrpe
é o próprio NRPE, portanto, se você alternar para o usuário nrpe
(de root
, provavelmente) antes de emitir o comando kill
, talvez sob circunstâncias muito improváveis tente para matar um processo inocente e pobre que pertence a outra coisa, mas você não terá permissão para fazê-lo e isso não terá nenhum efeito.