一:信號的基本概念
//進程之間的常用通信手段:發送信號,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)