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;
// }