用户定义的信号 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
,它更可靠,给你更多的控制权。
所以,首先,我知道这个话题被讨论了很多,但是我已经搜索了一个多小时,我无法解决这个问题。
我正在做一个项目,这部分包括从公民进程向服务器进程发送 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
,它更可靠,给你更多的控制权。