【问题标题】:c - Can't subscribe to new signal handler in Linuxc - 无法订阅 Linux 中的新信号处理程序
【发布时间】: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


【解决方案1】:

试试这个...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多