为什么Linux上的示例代码中没有引发信号?

时间:2012-12-19 17:24:15

标签: c linux signals

我正在尝试理解以下有关信号的示例代码:

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

sig_atomic_t sigusr1_count = 0;

void handler(int signal_number) {
    ++sigusr1_count;
}

int main() {
    struct sigaction sa;
    memset(&sa, 0, sizeof(sa));
    sa.sa_handler = &handler;
    sigaction(SIGUSR1, &sa, NULL );
    printf("SIGUSR1 was raised %d times\n", sigusr1_count);
    return 0;
}

输出结果为:

SIGUSR1 was raised 0 times

为什么信号没有被提升?

3 个答案:

答案 0 :(得分:3)

有几个原因。首先,没有任何东西可以将SIGUSR1发送到您的进程。另一个更重要的是,你没有给任何人这么做的时间。注册信号处理程序后,立即打印出接收信号的次数,最可能的是,少于几毫秒。在打印结果之前,您需要添加sleep(10)之类的内容。

答案 1 :(得分:0)

因为没有任何信息向您的应用程序发送SIGUSR1信号?您是否尝试运行kill -USR1 pid发送信号?或kill(pid, SIGUSR1)来自此应用程序或其他应用程序?

答案 2 :(得分:0)

你在哪里发送信号SIGUSR1?您应该在sigaction之后和printf之前感知...在main函数中添加循环。