Linux14 訊號的使用及底層實現

2021-09-19 08:34:29 字數 1124 閱讀 8244

作業系統預先定義好的某些特定的事件,訊號可以被產生,也可以被接受。產生和接收的主體都是程序。

程序接受到訊號後,怎麼處理——訊號的響應方式:預設sig_dfl, 忽略ig_ign,自定義

如何修改訊號的響應方式:typedef  void(*fun) (int);

fun signal (int signum,fun fun);//修改訊號響應方式的函式signal,訊號值,訊號型別,修改的是哪乙個訊號的響應方式。在/usr/include/bits/signum.h裡面定義的都是訊號,都是巨集。

sigint  ctrl+z

sigchld 子程序狀態被改變是觸發的訊號。

int kill(int pid,int sigtype);

pid:將訊號傳送的程序,pid>0 指定接收訊號的pid,pid==0 將訊號傳送給當前程序組中的所有程序,pid==-1,將訊號傳送給系統上所有的程序,p

(作業:用kill函式實現kill命令,kill  pid預設傳送的是15號訊號,命令結束的程序是通過訊號機制實現的)

都呼叫了send_sig(sigint,pcb,flag);

連續接收到n次訊號,如果第乙個訊號正在處理則第二個訊號會等待第乙個處理完成,接收訊號的程序會將生育所有的訊號都合併成乙個訊號。訊號響應方式一旦修改,後續接收訊號一直沿用,直到程序終止或者再次修改。

實現:程序第一次接收列印hello world,第二次接收結束程序。ctr c=sigint

第一次接收到訊號和第二次接收到訊號之間將響應方式修改。只能在第一次修改處理函式中修改訊號的響應方式。

#include

void fun(int sig)

int main(int argc,char*ar**,char*envp)

exit(0);

}

linux 訊號的使用

linux環境下c程式設計指南 楊樹青 王歡 如要執行乙個需要花費較長時間的大型科學計算程式,在程式執行過程中,希望能隨時了解程式執行的狀態,可以使用兩種不同的方法。一是在程式的迴圈體中加入一些判斷,輸出之類的語句。這種方法將會使程式的 增加,儘管一次操作所需時間不長,但當程式要迴圈很多次時,其耗費...

Linux程序操作 訊號及訊號處理 訊號的基礎

訊號的影響 linux下有五種方式產生訊號 對於乙個訊號,linux環境下的程序只有三種處理方式 訊號的到來會中斷程序,使得程序跳轉到訊號處理程式處執行,然後繼續執行該程序的其他部分。如果在訊號到來的時候正在執行系統呼叫,則該系統呼叫會被中斷,當訊號處理程式返回時,系統會重新啟動系統呼叫。使用sig...

Linux的訊號的分析使用

1 sighup 2 sigint 3 sigquit 4 sigill 5 sigtrap 6 sigabrt 7 sigbus 8 sigfpe 9 sigkill 10 sigusr1 11 sigsegv 12 sigusr2 13 sigpipe 14 sigalrm 15 sigterm...