2017-04-15 18 views
0

exec 바로 전에 setpgid (0,0)에 의해 자신의 프로세스 그룹으로 이동 된 10 개의 하위 프로세스가 있다고 가정합니다. (각각의 자식 또한 자신의 프로세스 그룹에있는 자식을가집니다.) 내 전경 프로세스가 ctrl-c SIGINT 신호를 받고 모든 자식 프로세스 (모든 자식이 다른 그룹에 있음)로 전파하려고합니다. 그렇게하는 방법?C에서 자신의 프로세스 그룹에있는 부모에서 자식으로 신호를 전파하는 방법은 무엇입니까?

빠른 초안이 내 문제를 더 잘 설명하기를 바랍니다.

void handler(int signal) { 
// resend SIGINT to all childs but childs are in different pgid 
} 

int main(int argc, char* argv[]){ 

struct sigaction sa; 
sa.sa_handler = &handler; 

sigaction(SIGINT, &sa, NULL); 

pid_t pid[SIZE]; 

int i = 0; 
// if argv is ge 2; 
for (;i < SIZE; i++) // SIZE is number of the elements in argv 
{ 
    pid[i] = fork(); 
    if(pid[i] == 0) 
    { 
     setpgid(0,0); 
     // execv self here but with one less element in argv; 
    } 
} 
while(1){}; // infinity loop (waits for ctrl-c from foreground process) 

// prints to the terminal pid and pgid 
// waits here for all childs to finish and then close self 
} 
+0

각 부모가 각각의 자식에게'SIGINT '를 보냅니 까? – alk

답변

0

주 프로세스의 신호 처리기에서 신호를 수동으로 전송하는 방법은 무엇입니까? 어쩌면 당신은 당신이있는 상황을 명확하게하기 위해 코드 스 니펫을 제공 할 수 있습니다.

void signalHandler(int signum) 
{ 
    kill(child_pid,signum); 
    //other stuff 
}