gpt4 book ai didi

linux - Sigaction 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:10 24 4
gpt4 key购买 nike

我正在学习信号并编写了一个简单的程序来处理它们。

所以我输入一个数字,然后使用 fork 创建一个进程。父进程应该将数字作为信号发送给子进程,然后 child_signal 处理程序应该将数字的平方作为信号发回。

这是代码。

#include <iostream>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>
using namespace std;

void child_handler(int sig_num){
cout<<"Child recieved a signal"<<endl;
pid_t ppid = getppid();
if(kill(ppid,sig_num*sig_num) == -1){
cout<<"Childs signal handler failed to send a signal "<<endl;

}
cout<<"Sent a sgnal to the parent"<<endl;
return;
}

void parent_handler(int sig_num){
cout<<"Parent recieved a signal "<<endl;
cout<<sig_num<<endl;
return;
}

int main(){
int n;
cin>>n;
pid_t pid = fork();
if(pid != 0){

struct sigaction sa2;
memset(&sa2,0,sizeof(sa2));
sa2.sa_handler = parent_handler;

if(sigaction(n,&sa2,NULL) == -1){
cout<<"Parents sigaction failed "<<endl;
}

if(kill(pid,n) == -1){
cout<<"Kill failed "<<endl;
}
cout<<"Sent a signal to the child"<<endl;
waitpid(pid,0,0);
}
else{

struct sigaction sa1;
memset(&sa1,0,sizeof(sa1));
sa1.sa_handler = child_handler;

if(sigaction(n,&sa1,NULL) == -1){
cout<<"Childs sigaction failed eerno:"<<errno<<endl;
}

sleep(20);

return 0;
}
return 0;
}

输出是这样的。

向 child 发送信号。

而且它没有提及任何关于 sigaction 的内容。

最佳答案

在您的代码中,子进程可以在设置处理程序之前接收信号。

关于linux - Sigaction 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com