-1

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

#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

为什么没有发出信号?

4

3 回答 3

3

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

于 2012-12-19T17:33:29.280 回答
0

因为没有任何东西向SIGUSR1您的应用程序发送信号?您是否尝试运行kill -USR1 pid以发送信号?或者kill(pid, SIGUSR1)来自这个或另一个应用程序?

于 2012-12-19T17:27:14.177 回答
0

你把信号发到哪里去了SIGUSR1?您应该在之后sigaction和之前感觉到它...在您的函数printf中添加一个循环。main

于 2012-12-19T17:27:32.487 回答