用signal函式捕捉訊號SIGINT

2021-10-01 23:19:00 字數 1004 閱讀 6819

用系統呼叫函式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 ...