c - 试图用 sigaction 调用处理程序捕获 SIGINT 但仍然杀死进程
问题描述
我正在尝试处理我正在编写的程序中的一些 C 信号,以添加一些安全网以防意外关闭等。我一直在尝试使用 sigaction 为 SIGINT 设置信号处理程序,我可以看到处理程序正在被调用,但它并没有阻止程序被杀死。
尝试将信号与 SIG_IGN 一起使用可以正常工作,但是使我无法使用自定义处理。我已经尝试将信号(...)与我的处理程序和 sigaction(...)一起使用,但实际上都没有工作。
void handler(int SIG) {
//I know this is unsafe just for testing.
printf("Handled signal %d!\n", SIG);
//No actual logic for now.
}
void initializer() {
//...
struct sigaction sa;
sa.sa_handler = handler;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
//This doesn't work.
sigaction(SIGINT, &sa, NULL);
//This also didn't work.
// signal(SIGINT, handler);
//...
}
我相信处理信号会默认停止它,我在网上看到的一切都表明这应该足够了,但我仍然收到:
^CHandled signal 2!
然后进程被杀死...
解决方案
推荐阅读
- debugging - earlyprintk 无法按预期工作,内核在引导期间挂起
- ios - 检测何时 isEnabled localVideoTrack false WebRTC IOS
- python - TensorFlow 图像转换器 (Pix2Pix)
- powershell - 无法在 PowerShell 脚本中将字符串转换为 DateTime 对象
- java - 根据 Android 中其他微调器的选择填充微调器
- svn - svn 1.8 冲突:本地文件删除,更新时传入文件编辑
- scrapy - 如何让scrapy在失去连接一段时间后继续下载
- authentication - 在 babylonjs 中控制资产加载以进行身份验证
- module - zef 是否识别和处理预发布模块?
- python - 从 for 循环中的列表中获取对?