Eu tenho um script init /etc/init.d/myservice
para inicializar um serviço como este:
...
start() {
...
daemon /usr/sbin/myservice
...
}
stop() {
...
pgrep myservice
pidof myservice
ps -ef | grep myservice
...
}
E quando tento interromper o serviço, esta é a saída:
10000 10001
10000
root 10000 1 0 09:52 ? 00:00:02 /usr/sbin/myservice
root 9791 9788 0 10:06 pts/1 00:00:00 /bin/sh /sbin/service myservice stop
root 10001 9791 1 10:06 pts/1 00:00:00 /bin/sh /etc/init.d/myservice stop
root 9805 9796 0 10:06 pts/1 00:00:00 grep myservice
Isso é esperado? Por que pidof
retornar apenas o PID correto do serviço que desejo parar e pgrep
retornar o PID do serviço e o PID do script init? Posso confiar em que pidof
sempre ignorará o PID do script init?
fonte
pidof
não está voltando10001
, porque o programa ésh
, não?Eu acho que você não deve confiar
pidof
, pois pode causar falha no seu programa. Um exemplo simples com osupervisord
programa:Você pode ver, o que
supervisord
é realmente chamado pelo intérprete python, causapidof
falha:fonte
killproc
. Por que você não usar isso enquanto você haved usadodaemon
nastart
função?killproc
para matar o próprio processo.parent process
, achild process
vontade também morreu.O
pidof
comando ignora scripts, a menos que você inclua a-x
opção Além disso, é mais seguro incluir o caminho completo no comando pidof, como em:isso minimiza as chances de encontrar algum outro processo.
fonte