sigsuspend--让进程挂起,等到特定的信号才继续执行
来源:互联网 发布:布拉热洛纳子爵 知乎 编辑:程序博客网 时间:2024/05/17 08:56
sigsuspend--让进程挂起,等到特定的信号(而int pause(void)等的是任意的信号)才继续执行,就是先不动再动;
而signal函数相反--运行等到特定信号去运行信号处理函数,就是先动再不动(如遇到ctrl-c是停止,其实很多情形不是这样,只是方便记忆而已。)
int sigsuspend(const sigset_t *set);void *signal(int signum, void * handler);
sigsuspend函数等的是*set中值为0的bit(因为值为1的bit被屏蔽掉了)。看例子更直观:
example:
#include<signal.h>#include<stdio.h>#include<unistd.h>#include<errno.h>int main(void){ void sig_int(int); sigset_t newmask, oldmask, zeromask; if(signal(SIGINT,sig_int)==SIG_ERR) { puts("signal (SIGINT) error"); return 0; } if(signal(SIGQUIT,sig_int)==SIG_ERR) { puts("signal (SIGQUIT) error"); return 0; } sigemptyset(&zeromask); sigemptyset(&newmask); sigaddset(&newmask, SIGINT);//把SIGINT加入newmask if(sigprocmask(SIG_BLOCK,&newmask,&oldmask)<0)//此时信号掩码=SIGINT即屏蔽SIGINT { puts("SIG_BLOCK error"); return 0; } sigaddset(&zeromask,~SIGINT);// zeromask中除了SIGINT对应的bit为0其余都为1//等的是值为0的bit(因为值为1的bit被屏蔽掉了,这里是用zeromask的各bit来看的,不是以信号掩码来看的),//即现在等的是SIGINT sigsuspend(&zeromask);//进程挂起,等待SIGINT if(sigismember(&zeromask,SIGINT))//肯定没有啦 { puts("catch signal SIGINT"); } //quitflag=0; if(sigprocmask(SIG_SETMASK,&oldmask,NULL)<0) return(0);}void sig_int(int signumber){ if(signumber==SIGQUIT) printf("\nSIGQUIT\n"); else if(signumber==SIGINT)puts("SIGINT comes."); return;}
/*
output:
运行./a.out,开始在等待,当press ctrl-c时:
[lyt9469@localhost signal]$ g++ sigsuspend.c [lyt9469@localhost signal]$ ./a.out SIGINT comes.
*/
- sigsuspend--让进程挂起,等到特定的信号才继续执行
- 信号实现父子进程之间的同步--sigsuspend的作用
- 信号实现父子进程之间的同步--sigsuspend的作用
- 信号实现父子进程之间的同步--sigsuspend的作用
- C++ 调用exe,可等待调用的exe执行完毕后才继续执行父进程 CreateProcess
- 过期的suspend()挂起、resume()继续执行线程
- 不要等到要命的时候才跳
- Linux 让进程在关闭终端后继续执行
- linux 使用信号和挂起进程
- linux 信号 sigsuspend abort
- 信号操作sigsuspend
- 一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队
- 进程的挂起
- 进程的挂起状态
- 信号分类与详解 (3) 挂起进程类信号
- 关于sigsuspend返回多个信号的问题
- 一个学习等待信号sigsuspend()很好的例子
- Linux c 信号—pause、sigsuspend 的相同于区别
- 远程桌面连接数超过最大限制解决方法
- VB作业
- C++第十三周【任务2】让动物学叫,让我学抽象类!
- 金箍棒变长
- Linux系统调用的实现机制分析
- sigsuspend--让进程挂起,等到特定的信号才继续执行
- 十三周任务3
- MFC对话框最小化到托盘编程实现步骤
- 动画设计
- 随机变形
- JAVA类库分析之LinkedList
- 位操作基础篇之位操作全面总结 .
- AIR文件操作(二):使用文件对象操作文件和目录
- 实验报告1