信號(hào)處理小結(jié)

  • 信號(hào)(signal)是一種軟件中斷,它提供了一種處理異步事件的方法,也是進(jìn)程間惟一的異步通信方式。信號(hào)可由硬件中斷(按下組合鍵/除0/無效的存儲(chǔ)訪問)或軟中斷(進(jìn)程調(diào)用kill或sigqueue發(fā)送信號(hào))產(chǎn)生

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

依次發(fā)送kill -SIGUSR1 24021和kill -SIGKILL 20241可得到


Paste_Image.png

上面的示例中,盡管注冊(cè)了SIGKILL的處理函數(shù),并不起作用,是因?yàn)镾IGKILL和SIGSTOP這兩個(gè)信號(hào)不能被忽略,同時(shí)這兩個(gè)信號(hào)也不能被捕獲和阻塞。
另外:pause:將進(jìn)程掛起等待信號(hào),直到信號(hào)到來,才會(huì)繼續(xù)處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容