c - 无法在Linux中订阅新的信号处理程序

时间:2015-03-03 09:49:23

标签: linux signals signal-handling

我试图在我当前的信号处理程序中订阅一个新的信号处理程序,但没有任何反应。 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;
}

1 个答案:

答案 0 :(得分:0)

试试这个......

static void usr1b(int signo) {
     if (signo == SIGUSR1) {
        cnt++;
        printf("SIGUSR1 count: %d\n", cnt);
    }
}