核心步驟:定義處理函數 → 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;
}
gcc sig.c -o sig./sig,記錄輸出的 PID(如 333)。kill -INT 333volatile sig_atomic_t 保証標誌讀寫原子性,防止編譯器優化導致主迴圈看不到變化。pause() 讓進程睡眠直到捕獲信號,比忙等待節省 CPU。sigaction() 以獲得更可靠的語義(參考上一篇)。