05.06 - 05.18_111期_Linux_信号

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

上一篇:移动UI:炫酷风格长什么样,我给你总结了8个特征。


下一篇:ELK 企业级日志分析系统