Linux异步-----信号量集
2015-08-07 14:20
656 查看
在实际的应用中一个应用程序需要对多个信号进行处理,为了方便,linux系统引进了信号集的概念。信号集用多个信号组成的数据类型sigset_t.可用以下的系统调用设置信号集中所包含的数据。
1、sigset_t在/include/asm-generic/signal.h中定义。
2、相应的系统调用函数:
set表示信号集指针,setnumber表示信号。
sigemptyset用于将set指向的信号集设为空,即不包含任何信号。
sigfillset用于将set指向的信号集设为满,即包含所有的信号。
sigaddset用于向信号集中添加信号。
sigdelset用于向信号集中删除信号。
以上函数成功返回0,失败返回-1
sigismember用于检测signumber是否在set中,若属于返回1,不是返回0.
3、有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。这种情况是通过阻塞信号实现的。
【信号阻塞和忽略信号的区别】
阻塞的概念和忽略信号是不同的。操作系统在信号被进程解除阻塞之前不会讲信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递。当进程忽略一个信号时,信号会被传递出去但进程会将信号丢弃。
sigprocmask设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)
how:用于指定信号修改的方式,可能选择有三种
SIG_BLOCK//将set所指向的信号集中包含的信号加到当前的信号掩码中。即信号掩码和set信号集进行或操作。
SIG_UNBLOCK//将set所指向的信号集中包含的信号从当前的信号掩码中删除。即信号掩码和set进行与操作。
SIG_SETMASK //将set的值设定为新的进程信号掩码。即set对信号掩码进行了赋值操作。
set:为指向信号集的指针,在此专指新设的信号集,如果仅想读取现在的屏蔽值,可将其置为NULL。
oldset:也是指向信号集的指针,在此存放原来的信号集。可用来检测信号掩码中存在什么信号。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为EINVAL。
1、sigset_t在/include/asm-generic/signal.h中定义。
typedef struct { unsignedlong sig[_NSIG_WORDS]; } sigset_t;
2、相应的系统调用函数:
<pre name="code" class="cpp">#include<signal.h> int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigadd(sigset_t *set,int setnumber); int sigdelset(sigset_t *set,int setnumber); int sigismember(const sigset_t set,int signumber)
set表示信号集指针,setnumber表示信号。
sigemptyset用于将set指向的信号集设为空,即不包含任何信号。
sigfillset用于将set指向的信号集设为满,即包含所有的信号。
sigaddset用于向信号集中添加信号。
sigdelset用于向信号集中删除信号。
以上函数成功返回0,失败返回-1
sigismember用于检测signumber是否在set中,若属于返回1,不是返回0.
3、有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。这种情况是通过阻塞信号实现的。
【信号阻塞和忽略信号的区别】
阻塞的概念和忽略信号是不同的。操作系统在信号被进程解除阻塞之前不会讲信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递。当进程忽略一个信号时,信号会被传递出去但进程会将信号丢弃。
sigprocmask设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)
#include <signal.h> int sigprocmask(ubt how,const sigset_t*set,sigset_t *oldset); int sigsuspend(const sigset_t*sigmask);参数:
how:用于指定信号修改的方式,可能选择有三种
SIG_BLOCK//将set所指向的信号集中包含的信号加到当前的信号掩码中。即信号掩码和set信号集进行或操作。
SIG_UNBLOCK//将set所指向的信号集中包含的信号从当前的信号掩码中删除。即信号掩码和set进行与操作。
SIG_SETMASK //将set的值设定为新的进程信号掩码。即set对信号掩码进行了赋值操作。
set:为指向信号集的指针,在此专指新设的信号集,如果仅想读取现在的屏蔽值,可将其置为NULL。
oldset:也是指向信号集的指针,在此存放原来的信号集。可用来检测信号掩码中存在什么信号。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为EINVAL。
相关文章推荐
- Linux常用命令汇总
- Linux mysql的远程连接
- linux /etc/rc.d/目录的详解
- 如何在linux上搭建FTP服务器以及在windows上访问
- Linux 图片上传需注意
- linux跳过用户名密码登陆界面方法
- linux意外关机,如何修复
- linux下迁移mysql数据库存放目录
- linux下的vi 常用编辑命令
- Linux中mysql表的导出导入
- vmstat命令是最常见的Linux/Unix监控工具
- win7下装ubuntu14.10双系统中遇到的一系列问题总结
- centos 安装LAMP环境后装phpmyadmin
- qwt安装调试linux
- linux多进程和多线程的优缺点
- centOS配置mysql+appache+vsftp=php服务器
- Linux系统用户账号管理
- Linux文件夹/文件基本操作
- Ubuntu和centos安装vsftpd步骤教程-ftp
- Linux 数据库学习的准备工作---win通过ssh访问ubuntu