C++ 如何接收来自孩子的信号
编写一个使用fork()创建子进程的程序。当父进程等待来自子进程的信号时,子进程打印其父进程的名称、父进程ID和自己的ID。家长在孩子终止后10秒设置报警。 下面的代码不接收来自child的报警信号,也不进入报警处理程序,即ding功能 我该怎么办C++ 如何接收来自孩子的信号,c++,operating-system,signals,signal-handling,C++,Operating System,Signals,Signal Handling,编写一个使用fork()创建子进程的程序。当父进程等待来自子进程的信号时,子进程打印其父进程的名称、父进程ID和自己的ID。家长在孩子终止后10秒设置报警。 下面的代码不接收来自child的报警信号,也不进入报警处理程序,即ding功能 我该怎么办 using namespace std; static int alarm_fired = 0; void ding(int sig) { sleep(10); cout<<"Alarm\n"; } int main()
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);
}
}
使用名称空间std;
静态int报警_已触发=0;
空顶(内部信号)
{
睡眠(10);
cout在孩子发送SIGALARM之前,您需要设置父信号处理程序“signal(SIGALRM,ding)”。在您的情况下,您可以将“signal(SIGALRM,ding)”移到fork()上方一行