信号处理小结

  • 信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。信号可由硬件中断(按下组合键/除0/无效的存储访问)或软中断(进程调用kill或sigqueue发送信号)产生

    #include <csignal>
    #include <iostream>
    #include <unistd.h>
    #include <time.h>
    using namespace std;
    void signalUsr1Handler(int signum) {
    cout << "interrup signal: " << signum << " received." << endl;
    //exit(signum);
    }
    void signalKillHandler(int signum) {
    cout << "signal kill: " << signum << " received." << endl;
    }
    int main(int argc, char* argv[]) {
    signal(SIGUSR1, signalUsr1Handler);
    signal(SIGKILL, signalKillHandler);
    while(1) {
    const time_t now = time(NULL);
    cout << asctime(localtime(&now)) << "going to sleep..." << endl;
    sleep(3);
    }
    //cout << "going to pause..." << endl;
    //pause();
    //
    return 0;
    }

依次发送kill -SIGUSR1 24021和kill -SIGKILL 20241可得到


Paste_Image.png

上面的示例中,尽管注册了SIGKILL的处理函数,并不起作用,是因为SIGKILL和SIGSTOP这两个信号不能被忽略,同时这两个信号也不能被捕获和阻塞。
另外:pause:将进程挂起等待信号,直到信号到来,才会继续处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容