我寫的/etc/init.d/mydaemon
:殺守護進程的所有子進程
# ...
source functions # LSB compliant
EXEC=/usr/local/bin/mydaemon
PROG=mydaemon
function start() {
daemon --pidfile=/var/run/mydeamon.pid ${EXEC}
}
function stop() {
killproc ${PROG}
}
# ...
我/usr/local/bin/mydaemon
:
#!/bin/bash
trap "trap TERM ; kill 0" TERM
binary with some args
AFAIK,這應該工作,因爲:
daemon
記錄mydaemon
「 s PID in/var/run/mydaemon.pid
killproc
讀取該PID並將SIGTERM
發送到該PID。mydaemon
捕獲此信號,禁用陷阱併發送SIGTERM
至整個PGRP
,包括binary with some args
的過程。
但是這不起作用。停止服務後,mydaemon
終止,但binary
仍在運行。
我錯過了什麼,和停止守護進程及其所有子進程的最佳做法是什麼?
BTW:
當我在/ usr/local/bin目錄/ mydaemon是:
#!/bin/bash
binary with some args &
echo $! $$ > /var/run/mydaemon.pid
wait
它可以正常工作,但這似乎不太可靠的我,有次在那裏這是不合適的(當二進制調用不太直截了當,或者它有自己的孩子等)。