【发布时间】:2011-03-21 12:26:55
【问题描述】:
我正在编写一个程序,它使用 fork 创建子进程并在它们完成时对它们进行计数。 我如何确定我没有丢失信号? 如果子程序在主程序仍在处理前一个信号时发送信号会发生什么?信号“丢失”了吗?我怎样才能避免这种情况?
void my_prog()
{
for(i = 0; i<numberOfDirectChildrenGlobal; ++i) {
pid = fork();
if(pid > 0)//parent
//do parent thing
else if(0 == pid) //child
//do child thing
else
//exit with error
}
while(numberOfDirectChildrenGlobal > 0) {
pause(); //waiting for signal as many times as number of direct children
}
kill(getppid(),SIGUSR1);
exit(0);
}
void sigUsrHandler(int signum)
{
//re-register to SIGUSR1
signal(SIGUSR1, sigUsrHandler);
//update number of children that finished
--numberOfDirectChildrenGlobal;
}
【问题讨论】: