linux sigsuspend的疑惑?求大神解答
问题:
理论上sigsuspend执行期间只会触发一个信号处理函数,无法触发其他的信号处理函数,但是
现在的测试结果是连着输入Ctrl+C和Ctrl+\,Ctrl+C的信号处理函数中断了直接去执行了Ctrl+\的
信号处理函数(理论上应该接受了Ctrl+C的信号之后就会把Ctrl+\的信号屏蔽掉,但为什么还会
调用Ctrl+\的信号处理函数呢?)
测试结果如下:
代码如下:
源码:
#include<iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;
void printsignal(int AnSignal)
{
cout << "signal = [" << AnSignal << "]的信号来了" << endl;
sleep(5);
}
int main(int argc, char const *argv[])
{
signal(SIGINT, printsignal);
signal(SIGQUIT, printsignal);
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGINT);
sigaddset(&set, SIGQUIT);
if(-1 == sigprocmask(SIG_SETMASK, &set, NULL))
{
cout << "sigpromask失败!" << endl;
return -1;
}
else
{
cout << "sigpromask成功!" << endl;
}
sigset_t empSet;
sigemptyset(&empSet);
while(true)
{
sigsuspend(&empSet);
cout << "sigsuspend函数调用结束!" << endl;
}
return 0;
}