用系統呼叫函式fork( )建立兩個子程序,再用系統呼叫函式signal()讓父程序捕捉訊號sigint(用kill命令來觸發),當捕捉到中斷訊號後,父程序用系統呼叫函式kill()向兩個子程序發出訊號,子程序捕捉到父程序發來的訊號後,分別輸出下列資訊後終止:
child process 1 is killed by parent!
child process 2 is killed by parent!
父程序等待兩個子程序終止後,輸出以下資訊後終止:
parent process exit!
分析過程:
父程序: 建立兩個子程序,呼叫signal函式捕捉sigint訊號–>func(), 在func函式中,使用kill傳送訊號sighup 給子程序.然後 wait(null)
子程序1: 呼叫signal函式捕捉sighup訊號,執行函式func1,輸出一句話,然後結束。
子程序2: 呼叫signal函式捕捉sighup訊號,執行函式 func2,輸出一句話,然後結束。
#include
#include
#include
#include
#include
#include
pid_t pid=
1,pid1=1;
//測試pid數值傳遞
void
fatherfun
(int arg)
void
child1
(int arg)
void
child2
(int arg)
intmain()
if(pid >0)
//父程序等待接收捕捉訊號
if(pid1 >0)
//子程序2等待接收父程序傳送的訊號
if(pid1 ==0)
}//子程序1等待接收父程序傳送的訊號
if(pid ==0)
return0;
}
signal 捕捉訊號
file demo6.c synopsis inclue typeof void sighandler t int sighandler t signal int signum,sighandler t handler author mrclimb version 1.1.0 date 2012 0...
訊號 訊號處理函式(捕捉)
要明白訊號處理函式的使用,就要先知道訊號的捕捉設定,什麼時候會呼叫訊號處理函式和其執行的流程是什麼,下圖完整的展示了訊號捕捉的設定,以及訊號處理函式的觸發機制 所以,從上圖可以知道,只有當程式中斷,異常或系統呼叫,才會進入核心態,也只有進入了核心態才能處理訊號,在這裡初學者常常有乙個誤區,他們會覺得...
訊號之signal函式
unix系統的訊號機制最簡單的介面是signal函式。signal函式的功能 為指定的訊號安裝乙個新的訊號處理函式。include void signal int signo,void func int int 複雜原型分開看 void signal int signo,void func int ...