我写的/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
它可以正常工作,但这似乎不太可靠的我,有次在那里这是不合适的(当二进制调用不太直截了当,或者它有自己的孩子等)。