用户定义的信号1问题,信号()为';t处理C语言
所以,首先,我知道这个话题被谈论了很多,但我已经搜索了一个多小时,我无法解决这个问题 我正在做一个项目,这部分包括从一个citizen进程向一个服务器进程发送一个SIGUSR1信号,服务器必须处理SIGUSR1并检查citizen的id(以前读取) 我已经将函数signal()用于一些其他信号,例如SIGALRM和SIGINT,它处理得很好。然而,当涉及到信号时(SIGUSR1,handler_usrUm);它不处理并显示用户定义的信号1 我的公民程序用户定义的信号1问题,信号()为';t处理C语言,c,signals,C,Signals,所以,首先,我知道这个话题被谈论了很多,但我已经搜索了一个多小时,我无法解决这个问题 我正在做一个项目,这部分包括从一个citizen进程向一个服务器进程发送一个SIGUSR1信号,服务器必须处理SIGUSR1并检查citizen的id(以前读取) 我已经将函数signal()用于一些其他信号,例如SIGALRM和SIGINT,它处理得很好。然而,当涉及到信号时(SIGUSR1,handler_usrUm);它不处理并显示用户定义的信号1 我的公民程序 FILE * pidfile = fope
FILE * pidfile = fopen (FILE_PID_SERVIDOR, "r");
int pidServer; // reading server's pid from file
fread(&pidServer, sizeof(int), 1, pidfile);
printf("%d\n", pidServer);
kill(pidServer, SIGUSR1);
pause();
我的服务器
int main(){
/* other code*/
printf("I will wait send it here: %d\n", getpid()); // just to check what was the server's pid
pause(); //Waits for (SIGUSR1).
signal(SIGUSR1,handler_usrUm);
}
处理者
void handler_usrUm(int sinal){
printf("Got it!\n"); // We shouldn't use printf but it is just to check
/* some other code*/
}
是否与signal()和SIGUSR1不兼容?我必须使用sigaction吗
注意但您在暂停后定位捕捉行为:
pause(); //Waits for (SIGUSR1).
signal(SIGUSR1,handler_usrUm);
反过来说:
signal(SIGUSR1,handler_usrUm);
pause(); //Waits for (SIGUSR1).
更多:不要使用旧的API,更喜欢使用更可靠、更易于控制的
sigaction
。但暂停后您将定位捕捉行为:
pause(); //Waits for (SIGUSR1).
signal(SIGUSR1,handler_usrUm);
反过来说:
signal(SIGUSR1,handler_usrUm);
pause(); //Waits for (SIGUSR1).
更多:不要使用旧的API,更喜欢使用更可靠、更易于控制的
sigaction
。非常感谢!问题解决了。我知道,由于操作系统的不同,sigaction更可取,但一旦我只使用这个学者型的,它就很好了。另外,我还需要学习更多关于sigaction的知识,我仍然对它感到不舒服。非常感谢!问题解决了。我知道,由于操作系统的不同,sigaction更可取,但一旦我只使用这个学者型的,它就很好了。另外,我还需要学习更多关于sigaction的知识,我仍然对它感到不舒服。请注意,你应该避免。请注意,你应该避免。