我正在尝试理解以下有关信号的示例代码:
#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
为什么信号没有被提升?
答案 0 :(得分:3)
有几个原因。首先,没有任何东西可以将SIGUSR1发送到您的进程。另一个更重要的是,你没有给任何人这么做的时间。注册信号处理程序后,立即打印出接收信号的次数,最可能的是,少于几毫秒。在打印结果之前,您需要添加sleep(10)
之类的内容。
答案 1 :(得分:0)
因为没有任何信息向您的应用程序发送SIGUSR1
信号?您是否尝试运行kill -USR1 pid
发送信号?或kill(pid, SIGUSR1)
来自此应用程序或其他应用程序?
答案 2 :(得分:0)
你在哪里发送信号SIGUSR1
?您应该在sigaction
之后和printf
之前感知...在main
函数中添加循环。