2011-07-26 3 views
1

시나리오 : 우리는 리눅스 데몬을 가지고 있는데, Alpha라고 부릅니다. 알파 포크/execs 자식 프로세스, 브라보. 그런 다음 Bravo는 여러 하위 프로세스를 생성하고 Charlie 및 Delta라고 부릅니다.리눅스 - 죽어가는 아이들 (내 손자)

 
Alpha 
    | 
    \-Bravo 
    | 
     \-Charlie 
    | 
     \-Delta 

브라보 다이. Alpha에는 sig 자식 처리기가 설치되어 있습니다.

알파에서 브라보 (찰리와 델타)의 모든 아이들을 어떻게 찾을 수 있습니까?

내가 관찰 한 바에 따르면 Bravo가 죽으면 Charlie와 Delta가 init (pid = 1)의 자식이됩니다. Bravo의 자녀가 재 할당되기 전에 1) 프로세스 트리를 검사하거나 2) Bravo의 자식이 Alpha에 상속된다는 것을 보장 할 수 있어야합니다. 그럴 경우, 나는 누가 내 (Alpha 's) 자신의 아이들 중 누가 누군지를 분류 할 수 있었다.

답변

1

이 경우 프로세스 그룹을 사용할 수 있습니다. Bravo이 시작될 때 을 사용하여 프로세스 그룹 리더가되고 execve()을 호출하십시오. 그 자식은이 프로세스 그룹 (PGID가 Bravo의 PID와 같으므로 Alpha이라고 알려짐)를 상속합니다.

Bravo이 종료되면 해당 자식은 init에 상속되지만 해당 PGID는 변경되지 않습니다. Alphakill()을 사용하여 한 번에 모두에게 신호를 보낼 수 있으며 첫 번째 인수로 PGID의 음수를 제공합니다. 예 :

exited_child = wait(&status); 
if (exited_child > 0) 
    kill(-exited_child, SIGTERM); 
+0

최고 : Alpha에 당신이 뭔가를 할 수 있습니다. 나는 너의 제안을 시험했다. 이것은 내가 필요한 것입니다. –

관련 문제