J'ai un script init /etc/init.d/myservice
pour initialiser un service comme celui-ci:
...
start() {
...
daemon /usr/sbin/myservice
...
}
stop() {
...
pgrep myservice
pidof myservice
ps -ef | grep myservice
...
}
Et quand j'essaie d'arrêter le service, voici la sortie:
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
Est-ce attendu? Pourquoi pidof
ne renvoie que le PID correct du service que je veux arrêter et pgrep
renvoie le PID du service et le PID du script init? Puis-je compter sur cela pidof
qui ignorera toujours le PID du script init?
la source
pidof
ne revient pas10001
, parce que le programme estsh
, non?Je pense que vous ne devriez pas compter
pidof
, cela peut entraîner l'échec de votre programme. Un exemple simple avecsupervisord
programme:Vous pouvez voir, le
supervisord
est en fait appelé par l'interpréteur python, provoque l'pidof
échec:la source
killproc
. Pourquoi vous ne l' utilisez pas pendant que vous haved utilisédaemon
enstart
fonction?killproc
pour tuer le processus lui-même.parent process
, sachild process
volonté mourra aussi.La
pidof
commande ignore les scripts sauf si vous incluez l'-x
option. De plus, il est plus sûr d'inclure le chemin complet sur la commande pidof, comme dans:cela minimise les chances de faire correspondre un autre processus.
la source