- 使用信号屏蔽机制暂时阻止程序响应SIGINT信号:
- 在C语言中,可以使用
sigprocmask
函数来设置信号屏蔽字。
- 首先,需要定义一个
sigset_t
类型的变量来表示信号集。然后,使用sigemptyset
函数初始化这个信号集为空,再使用sigaddset
函数将SIGINT
信号添加到信号集中。最后,调用sigprocmask
函数来设置信号屏蔽字,阻止SIGINT
信号。
- 何时解除屏蔽比较合适:
- 当程序处于一个不能被
SIGINT
信号打断的关键操作阶段(例如正在进行文件系统操作、数据库事务处理等),需要暂时屏蔽SIGINT
信号。在关键操作完成后,应该尽快解除屏蔽,恢复程序对SIGINT
信号的正常响应,以保证程序的交互性和可终止性。
- 关键代码片段:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
int main() {
sigset_t set;
// 初始化信号集为空
sigemptyset(&set);
// 将SIGINT信号添加到信号集中
sigaddset(&set, SIGINT);
// 暂时阻止SIGINT信号
if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
perror("sigprocmask");
return 1;
}
// 这里进行关键操作
printf("关键操作正在进行,SIGINT信号已被屏蔽...\n");
sleep(5);
// 解除对SIGINT信号的屏蔽
if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) {
perror("sigprocmask");
return 1;
}
printf("关键操作完成,SIGINT信号已解除屏蔽。\n");
return 0;
}