如何将C中的信号从父进程传播到自己进程组中的子进程?

时间:2017-04-15 13:33:30

标签: linux process signals sigint

假设我有10个子进程,它们在exec之前被setpgid(0,0)移动到它们自己的进程组。 (每个孩子也有孩子,他们也在自己的过程组中。) 我的前台进程得到ctrl-c SIGINT信号,我想将它传播到所有子进程(所有子进程都在不同的组中)。怎么做?

希望快速草案能够更好地解释我的问题。

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
}

1 个答案:

答案 0 :(得分:0)

如何在主进程的信号处理程序中手动转发信号。也许你可以提供一些代码片段来澄清你所处的情况。

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