用户定义的信号 1 问题,signal() 不处理 C 语言

User defined signal 1 issue, signal() isn't handling C language

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

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

我已经将函数 signal() 用于其他一些信号,例如 SIGALRM 和 SIGINT,它处理得很好。但是,当涉及到 signal(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,它更可靠,给你更多的控制权。