(2.2)信號的概念,認識,處理動作

一:信號的基本概念

	//進程之間的常用通信手段:發送信號,kill  第二章第二節講過;
	//上節課討論過 SIGHUP
	//信號 :通知(事情通知),用來通知某個進程發生了某一個事情;
	  //事情,信號都是突發事件, 信號是異步發生的,信號也被稱呼爲“軟件中斷”

	//信號如何產生:
	//a)某個進程發送給另外一個進程或者發送給自己;
	//b)由內核(操作系統)發送給某個進程
	 //b.1)通過在鍵盤輸入命令ctrl+c[中斷信號],kill命令
	 //b.2)內存訪問異常,除數爲0等等,硬件都會檢測到並且通知內核;

	//信號名字,都是以SIG開頭,上節課SIGHUP(終端斷開信號)
	 //UNIX以及類(類似)UNIX操作系統(linux,freebsd,solaris);支持的信號數量各不相同。10-60多個之間;

	//信號既有名字,其實也都是一些數字,信號是一些正整數常量;信號就是宏定義(數字,從1開始)
	//#include <signal.h>(/usr/include/)
	//gcc 
	//頭文件,包含路徑:/user/local/include/   /usr/include/
	//庫文件,連接路徑:/usr/ local/lib/      /usr/lib

	//sudo find / -name "signal.h" | xargs grep -in "SIGHUP"

二:通過kill命令認識一些信號

//kill :kill 進程id ,他的工作是發個信號給進程;
	//kill能給進程發送多種信號;
	//ps -eo pid,ppid,sid,tty,pgrp,comm | grep -E 'bash|PID|nginx'
	//sudo strace -e trace=signal -p 1184

	//a)如果你單純的用kill 進程id,那麼就是往 進程發送SIGTERM信號(終止信號)
	//kill -數字 進程id,能發出跟這個數字對應的信號  -1 進程id,SIGHUP信號去

	//b)如果我門用kill -1 進程id,那麼就是往進程nginx發送SIGHUP終止信號;同時進程nginx就被終止掉了;
	//c)kill -2 進程id,發送SIGINT信號;
	//kill -數字 進程id ,能發送出多種信號;

 kill 命令不同數字所能發出的不同信號

三:進程的狀態

//ps -eo pid,ppid,sid,tty,pgrp,comm,stat | grep -E 'bash|PID|nginx'
	//ps aux | grep -E 'bash|PID|nginx'    //aux所謂BSD風格顯示格式;
	//kill只是發個信號,而不是單純的殺死的意思。

 

 

四:常用的信號列舉

五:信號處理的相關動作

    //當某個信號出現時,我們可以按三種方式之一進行處理,我們稱之爲信號的處理或者與信號相關的動作;

    //(1)執行系統默認動作 ,絕大多數信號的默認動作是殺死你這個進程;

    //(2)忽略此信號(但是不包括SIGKILL和SIGSTOP)

    //kill -9 進程id,是一定能夠把這個進程殺掉的;

    //(3)捕捉該信號:我寫個處理函數,信號來的時候,我就用處理函數來處理;(但是不包括SIGKILL和SIGSTOP)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章