行程間通訊(Inter-Process Communication, IPC)目的是讓兩個程序(processes)可以溝通,而訊號(signal)是其中一種IPC方式。
當A程序想要發出一個訊號給B程序時,A程序稱為Caller;B程序稱為Callee。
簡單的Caller範例
#include<stdio.h>
#include<signal.h>
int main(int argc, char** argv){
int pid = atoi(argv[1]); // 取得 callee 的PID (Process ID)
printf("[%d]\n",pid);
kill(pid,SIGHUP); // 送出 SIGHUP 訊號
}
簡單的 Callee 範例
#include<stdio.h>
#include<signal.h>
void sighup(); // 宣告 SIGHUP 訊號處理函式
int main(){
signal(SIGHUP,sighup); // 註冊 SIGHUP 訊號處理函式
for(;;);
}
void sighup(){ // SIGHUP 訊號處理函式
signal(SIGHUP,sighup); // 為了能夠繼續處理 SIGHUP 訊號,需再註冊。
printf("Signal SIGHUP received!\n");
}