一、概述
案例:編寫一個小例子,注冊一個信號處理函數,處理進程中斷信號(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; }
三、展示效果