首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C編程:信號處理基礎範例與 SIGINT 捕獲實戰

     編輯:關於C語言

最小化信號處理程式架構

核心步驟:定義處理函數 → signal() 註冊 → 主迴圈 pause() 等待信號。

完整代碼

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

volatile sig_atomic_t flag = 1;

void handler(int sig) {
    printf("I get a signal! (sig=%d)\n", sig);
    flag = 0;
}

int main() {
    signal(SIGINT, handler);          // 捕獲 Ctrl+C
    printf("pid: %ld\n", (long)getpid());
    while (flag) pause();             // 等待信號
    return 0;
}

測試步驟

  1. 編譯:gcc sig.c -o sig
  2. 執行:./sig,記錄輸出的 PID(如 333)。
  3. 另開終端發送信號:kill -INT 333
  4. 觀察主程式印出提示並正常退出。

關鍵點說明

  • volatile sig_atomic_t 保証標誌讀寫原子性,防止編譯器優化導致主迴圈看不到變化。
  • pause() 讓進程睡眠直到捕獲信號,比忙等待節省 CPU。
  • 生產環境建議改用 sigaction() 以獲得更可靠的語義(參考上一篇)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved