在 C 語言中,signal() 函數用於設置特定信號的處理方式,是進行信號處理編程的核心接口。它定義於 <signal.h> 頭文件中,允許程序自定義對特定信號的響應動作,如忽略、捕獲或恢復默認行為。
#include <signal.h>
void (*signal(int signum, void (*handler)(int)))(int);
// 或者使用 typedef 簡化:
typedef void (*sig_t)(int);
sig_t signal(int signum, sig_t handler);
SIGKILL 和 SIGSTOP 外,可設置任意信號。int 參數的函數(信號編號)。收到信號時立即執行該函數,執行完畢後返回被中斷處繼續運行。當指定信號到達時,程序跳轉執行 handler 指向的函數。在信號處理函數執行期間,同類信號會被自動阻塞(儲存),直到處理函數返回才會重新調用;但其他類型信號仍可中斷當前處理函數。
返回值:成功返回先前的信號處理函數指針;出錯返回 SIG_ERR(即 (void *)-1)。
SIGINTSIGSEGV)等kill() 函數發送信號,kill 命令實為其封裝SIGALRM)、管道破裂(SIGPIPE)等#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void sigint_handler(int sig) {
printf("\n捕獲到信號 %d (SIGINT),程序即將退出...\n", sig);
_exit(0);
}
int main() {
signal(SIGINT, sigint_handler);
printf("程序運行中,按 Ctrl+C 觸發信號處理...\n");
while (1) {
sleep(1);
}
return 0;
}
printf、malloc 等)sigaction() 替代SIGKILL 和 SIGSTOP 無法被捕獲或忽略