【发布时间】:2015-03-03 09:49:23
【问题描述】:
我正在尝试在我当前的信号处理程序中订阅一个新的信号处理程序,但没有任何反应。 usr1b 没有输出在终端打印,usr1a 的输出在终端打印。
代码:
#include<signal.h>
#include<stdio.h>
#include<unistd.h>
static int counter = 0;
void usr1b(int sig1) {
printf("usr1b\n");
counter++;
printf("current count: %d", counter);
}
void usr1a(int sig) {
printf("usr1a\n");
if( signal(SIGUSR1, usr1b) == SIG_ERR) {
printf("ERROR\n"); // subscribe usr1b to SIGUSR1
}
}
int main(void) {
if(signal(SIGINT, SIG_IGN)==SIG_ERR)
printf("ERROR"); // ignore SIGINT
if(signal(SIGUSR1, usr1a)==SIG_ERR)
printf("ERROR"); // subscribe usr1a to SIGUSR1
printf("Send some signal to process %d\n", getpid());
while (1) {
sleep(1);
}
return 0;
}
【问题讨论】:
-
您是否向进程发送了另一个
SIGUSR1?另外,请注意,严格来说,在信号处理程序中使用printf是不允许的(但通常有效)。
标签: linux signals signal-handling