如何接收来自孩子的信号



编写一个使用fork()创建子进程的程序。子进程打印其父进程的名称、父进程ID和Own ID,而父进程则等待来自子进程的信号。家长在孩子终止后10秒设置警报

以下代码不会接收到来自子级的报警信号,也不会进入报警处理程序,即ding函数。

我该怎么办?

using namespace std;
static int alarm_fired = 0;
void ding(int sig)
{
sleep(10);
 cout<<"Alarmn";

}
int main()
{
int cpid,i,ppid;
int status = 0;
cpid=fork();
switch(cpid)
{
case -1:
        cout<<"error";
break;
case 0:
        cout<<"Child Block"<<endl;
        cout<<"Parentn"<<"ParentID: "<<getppid()<<"nChildID: "<<getpid();
        kill(getppid(), SIGALRM);
default:
        cout<<"Parent Waiting"<<endl;
        wait(&status);
        cout<<"Parent Waiting is Finished"<<endl; 
        signal(SIGALRM, ding);        
}
}

在子级发送SIGALARM之前,您需要设置父级信号处理程序"signal(SIGALRM,ding)"。在您的情况下,您可以将"signal(SIGALRM,ding)"移到fork()上方一行。

最新更新