Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户定义的信号1问题,信号()为';t处理C语言_C_Signals - Fatal编程技术网

用户定义的信号1问题,信号()为';t处理C语言

用户定义的信号1问题,信号()为';t处理C语言,c,signals,C,Signals,所以,首先,我知道这个话题被谈论了很多,但我已经搜索了一个多小时,我无法解决这个问题 我正在做一个项目,这部分包括从一个citizen进程向一个服务器进程发送一个SIGUSR1信号,服务器必须处理SIGUSR1并检查citizen的id(以前读取) 我已经将函数signal()用于一些其他信号,例如SIGALRM和SIGINT,它处理得很好。然而,当涉及到信号时(SIGUSR1,handler_usrUm);它不处理并显示用户定义的信号1 我的公民程序 FILE * pidfile = fope

所以,首先,我知道这个话题被谈论了很多,但我已经搜索了一个多小时,我无法解决这个问题

我正在做一个项目,这部分包括从一个citizen进程向一个服务器进程发送一个SIGUSR1信号,服务器必须处理SIGUSR1并检查citizen的id(以前读取)

我已经将函数signal()用于一些其他信号,例如SIGALRM和SIGINT,它处理得很好。然而,当涉及到信号时(SIGUSR1,handler_usrUm);它不处理并显示用户定义的信号1

我的公民程序

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的知识,我仍然对它感到不舒服。请注意,你应该避免。请注意,你应该避免。