2012-09-04 4 views
1

나는 /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이 작동합니다 :

  • daemonmydaemon 기록 ' s PID in /var/run/mydaemon.pid
  • killproc 해당 PID를 읽고 SIGTERM을 해당 PID로 보냅니다.
  • mydaemon이 신호를 트랩하고 트랩을 사용 안 함으로 설정하고 binary with some args 프로세스를 포함하여 을 전체 PGRP에 보냅니다.

그러나 이것은 작동하지 않습니다. 서비스를 중지 한 후 mydaemon은 종료되지만 binary은 계속 실행 중입니다.

내가 무엇을 놓치고, 데몬과 그 모든 아이들을 막는 가장 좋은 방법은 무엇입니까? 그것은 제대로 작동하지만이 나에게 덜 강력한 보인다

#!/bin/bash 
binary with some args & 
echo $! $$ > /var/run/mydaemon.pid 
wait 

및 시간 곳이 있습니다 BTW


: 내/usr/지방/빈/mydaemon는

입니다

때 이것은 적합하지 않습니다 (바이너리 호출이 간단하지 않은 경우 나 자신의 자식이있는 경우 등).

답변

2

는 pkill에있는 부모 프로세스의 ID를주는 경우에, 모든 아이들을 죽일거야 :

pkill -TERM -P parentID 
0

을 당신은 SIGINT가 수신 될 때 정리 프로세스 돌봐 trap을 설정할 수 있습니다. 예를 들어 :

function cleanup { kill $CHILDPID; exit 0; } 
trap cleanup SIGINT SIGTERM 

더 많은 예제 here를 참조하십시오.

관련 문제