【发布时间】:2018-03-15 05:30:33
【问题描述】:
我尝试运行一个简单的程序(代码如下),它应该接收并处理SIGUSR1 信号。它在“真正的”Linux 上运行良好,但如果我在发送 SIGUSR1 后在 WSL 上运行它,它会打印出来
用户定义信号1
然后终止。
AFAIK 这意味着程序没有处理 SIGUSR1 并且调用了默认处理程序。如何使 WSL 上的信号处理正常工作?
提前致谢!
源代码:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void handle_signal(int signo)
{
write(1, "Recieved user signal\n", 22);
}
int main()
{
struct sigaction act;
act.sa_handler = handle_signal;
sigfillset(&(act.sa_mask));
sigaction(SIGUSR1, &act, NULL);
printf("PID: %d\n", getpid());
while (1)
pause();
return 0;
}
【问题讨论】:
-
act对象未完全初始化,可能包含垃圾,sigaction结果未检查。 -
你是如何触发 SIGUSER1 事件的?
标签: c linux windows signals windows-subsystem-for-linux