博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 进程信号屏蔽字 - 设置进程信号屏蔽字
阅读量:4110 次
发布时间:2019-05-25

本文共 1815 字,大约阅读时间需要 6 分钟。

  1. 在使用 sigaction 函数处理信号时,可以一并设置进程的信号屏蔽字。但是有单独的函数可以用来设置进程的信号屏蔽字:sigprocmask 函数。
  2. sigprocmask 函数
#include 
int sigprocmask(int how, const sigset_t *set, sigset_t *oset);

参数 how 的取值如下:

名称 说明
SIG_BLOCK 把参数 set 中的信号添加到信号屏蔽字中
SIG_SETMASK 把信号屏蔽字设置为参数 set 中的信号
SIG_UNBLOCK 从信号屏蔽字中删除参数 set 中的信号
  1. 信号集操作函数
#include 
int sigemptyset(sigset_t *set); // 初始化信号集为空int sigaddset(sigset_t *set, int signo); // 向信号集中添加信号int sigfillset(sigset_t *set); // 初始化信号集为包含所有已定义的信号int sigdelset(sigset_t *set, int signo); // 删除给定的信号int sigismember(sigset_t *set, int signo); // 判断给定信号是否一个信号集的成员。返回值 1:是,0:不是,-1:信号无效
  1. 将信号加入进程屏蔽字,进程将屏蔽该信号,不做响应!!!(而在 sigaction 信号处理函数中,屏蔽的信号会被排队,并在随后被处理)
    代码如下:
#include 
#include
#include
void handleSig(int);void main(){
signal(SIGINT, handleSig); signal(SIGALRM, handleSig); int res; sigset_t set; sigset_t oset; sigemptyset(&set); sigemptyset(&oset); sigaddset(&set, SIGINT); // 添加 SIGINT 信号到信号集 sigaddset(&set, SIGALRM); res = sigprocmask(SIG_SETMASK, &set, &oset); // 设置进程信号屏蔽字为 set 信号集 while(1){
printf("alive.\n"); sleep(2); }}void handleSig(int sig){
switch(sig){
case SIGINT: // printf("got sigint\n"); sleep(10); printf("got sigint. done.\n"); break; case SIGALRM: // printf("got sigalrm\n"); sleep(10); printf("got sigalrm. done.\n"); break; }}

执行程序,运行结果如下(多次尝试 中断 该进程,进程都没有任何响应):

ubuntu@cuname:~/dev/beginning-linux-programming/test$ gcc -o test6 test6.cubuntu@cuname:~/dev/beginning-linux-programming/test$ ./test6alive.alive.^C^C^C^Calive.^C^C^C^C^C^C^C^C^C^C^C^Calive.^C^C^C^C^C^C^C^C^C^C^Calive.^C^C^C^C^C^C^C^C^Calive.^Calive.alive.alive.Killed

转载地址:http://tclsi.baihongyu.com/

你可能感兴趣的文章
创建自己的着色器程序
查看>>
osg的灯光使用
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
VC bug修改 MFC apps must not #include <windows.h>
查看>>
BCG安装与使用
查看>>
用C++语言,调用标准C语言编译器编程的库
查看>>
C++注意事项——1、确保每个对象在使用前已被初始化
查看>>
局部变量和全局变量的差别
查看>>
2、掌握变量定义的位置与时机
查看>>
new/delete与malloc/free的区别
查看>>
数组和指针,怎么去理解?
查看>>
【设计经验传承】图标设计初阶要先型
查看>>
const修饰指针和引用的用法
查看>>
位操作与逻辑操作符号的区别
查看>>
良好的编程风格
查看>>
goto
查看>>
内联函数与宏
查看>>
如何降低函数的圈复杂度
查看>>
字符串
查看>>
使用#define定义字面值和伪函数
查看>>