【跪求解答】关于信号处理函数的有关问题
【跪求解答】关于信号处理函数的问题
这个是我在《UNIX环境高级编程 第三版》P302页的10-31程序看到的,是处理vi停止后重新绘制终端的,有以上三点不理解的地方请大侠们帮解答下。
------解决思路----------------------
那个测试程序结果为啥是这样呢
不理解啊,但是把
sigemptyset(&mask);
sigaddset(&mask, SIGTSTP);
sigprocmask(SIG_UNBLOCK, &mask, NULL);
改到main里,就符合我的预期了
照理来说信号处理中再有信号应该是未决的啊
难道我理解错误了
还是sigprocmask 这个函数有啥别的奇葩的作用?
void sig_tstp(int signo) {
sigset_t mask;
/* do something 1 */
sigemptyset(&mask);
sigaddset(&mask, SIGTSTP);
sigprocmask(SIG_UNBLOCK, &mask, NULL);
//1.这里如果这时候来了一个SIGTSTP信号那么,信号还没有设置成默认不是还会进入sig_tstp函数么?
//这里是否应该这样写
/*
signal(SIGTSTP, SIG_DFL);
sigemptyset(&mask);
sigaddset(&mask, SIGTSTP);
sigprocmask(SIG_UNBLOCK, &mask, NULL);
kill(getpid(),SIGTSTP);
*/
signal(SIGTSTP, SIG_DFL);
kill(getpid(), SIGTSTP);//向自己发送停止信号
//2.如果信号的发送延迟比较大那么,是否会再SIGTSTP没有停止进程之前就执行了下面的 do something 2
//3.这里如果这时候来了一个SIGTSTP信号那么,信号还没有设置成sig_tstp不是还会进入默认处理么?
signal(SIGTSTP, sig_tstp);
/* do something 2 */
}
这个是我在《UNIX环境高级编程 第三版》P302页的10-31程序看到的,是处理vi停止后重新绘制终端的,有以上三点不理解的地方请大侠们帮解答下。
------解决思路----------------------
那个测试程序结果为啥是这样呢
不理解啊,但是把
sigemptyset(&mask);
sigaddset(&mask, SIGTSTP);
sigprocmask(SIG_UNBLOCK, &mask, NULL);
改到main里,就符合我的预期了
照理来说信号处理中再有信号应该是未决的啊
难道我理解错误了
还是sigprocmask 这个函数有啥别的奇葩的作用?