Linux注冊信號處理函數


一、概述

  案例:編寫一個小例子,注冊一個信號處理函數,處理進程中斷信號(SIGINT),我們運行程序后按住Ctrl+C不能退出這個程序,因為我們在代碼中已經對這個信號進行捕獲了。,捕獲之后它就只走我們自己的邏輯而不走系統默認的邏輯。

  信號機制:

進程A給進程B發送信號,進程B收到信號之前執行自己的代碼,收到信號后,不管執行到程序的什么位置,都要暫停運行,去處理信號,處理完畢后再繼續執行。與硬件中斷類似——異步模式。但信號是軟件層面上實現的中斷,早期常被稱為“軟中斷”。
每個進程收到的所有信號,都是由內核負責發送的

 

  signal函數介紹: 

函數作用:注冊信號捕捉函數
函數原型
         typedef void (*sighandler_t)(int);
           sighandler_t signal(int signum, sighandler_t handler);
函數參數
signum:信號編號
handler:信號處理函數

 

  

二、代碼示例 

//signal函數測試---注冊信號處理函數
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>

//信號處理函數
void sighandler(int signo)
{
    printf("signo==[%d]\n", signo);
}

int main()
{
    //注冊信號處理函數
    signal(SIGINT, sighandler);

    //while(1)
    {
        sleep(10);
    }

    return 0;
}

 

  

三、展示效果

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM