如何接收来自孩子的信号

时间:2015-03-21 07:29:21

标签: c++ operating-system signals signal-handling

编写一个使用fork()创建子进程的程序。当父级等待来自子进程的信号时,子级将打印其父级名称,父级ID和自己的ID。在孩子终止后10秒,家长会设置闹钟。

以下代码不接收来自儿童的警报信号,也不会进入警报处理程序,即ding功能。

我该怎么办?

using namespace std;

static int alarm_fired = 0;

void ding(int sig)
{

sleep(10);

 cout<<"Alarm\n";


}

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<<"Parent\n"<<"ParentID: "<<getppid()<<"\nChildID: "<<getpid();

        kill(getppid(), SIGALRM);

default:
        cout<<"Parent Waiting"<<endl;

        wait(&status);

        cout<<"Parent Waiting is Finished"<<endl; 

        signal(SIGALRM, ding);        
}
}

1 个答案:

答案 0 :(得分:0)

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