signal 可以自定义进程在接收到指定信号后,会执行的函数
sigaction 除了可以做signal 可以做的功能,还可以通过sigaction这个结构体了解信号的更多具体信息
void sigcb(int sig)
{
std::cout << " get a sig: " << sig << std::endl;
}
int main()
{
// sigset_t lnew,lold;
// struct sigaction act;
// act.sa_handler = sigcb; //信号处理函数handler
// sigemptyset(&act.sa_mask);
// act.sa_flags = 0;
// sigaction(2, &act, 0); //准备捕捉SIGINT信号
// sigemptyset(&lnew);
// sigaddset(&lnew, 2);
// sigprocmask(SIG_BLOCK, &lnew, &lold); //将SIGINT信号阻塞,同时保存当前信号集
// std::cout << "Blocked because of 2" << std::endl;
// sigprocmask(SIG_SETMASK, &lold, NULL); //取消阻塞
// pause();
// sigaction(40, &act, 0); //准备捕捉40号信号
// sigemptyset(&lnew);
// sigaddset(&lnew, 40);
// sigprocmask(SIG_BLOCK, &lnew, &lold); //将40号信号阻塞,同时保存当前信号集
// std::cout << "Blocked because of 40" << std::endl;
// sigprocmask(SIG_SETMASK, &lold, NULL); //取消阻塞
// pause();
while (i--)
{
kill(getpid(), 40);
kill(getpid(), 2);
// sleep(1);
}
// while (j--)
// {
// kill(getpid(), 40);
// // sleep(1);
// }
}
// int main()
// {
// struct sigaction act, oact;
// act.sa_handler = sigcb;
// sigemptyset(&act.sa_mask);
// act.sa_flags = 0;
// sigaction(SIGFPE, &act, &oact);
// int a = 10;
// a /= 0;
// return 0;
// }
// int main()
// {
// signal(SIGFPE, sigcb);
// int a = 10;
// a /= 0;
// return 0;
// }