訊號捕捉特性:
1. 程序正常執行時,預設pcb中有乙個訊號遮蔽字,假定為*,它決定了程序自動遮蔽哪些訊號,當註冊了某個訊號捕捉函式,捕捉到該訊號以後,要呼叫該函式,而該函式有可能執行很長時間,在這期間所遮蔽的訊號不由來指定,而是用sa_mask來指定,調完訊號處理函式,再次恢復
2. ***訊號捕捉函式執行期間,***訊號自動被遮蔽
3. 阻塞的常規訊號不支援排隊,產生多次只記錄一次。(即前31個)
sigchld訊號
子程序在暫停或者退出的時候回傳送sigchld訊號,可以通過捕捉sigchld
訊號來**子程序。
#include
#include
#include
void
catch_sig
(int num)
}int
main()
}if(i ==10)
}else
if(i <10)
}
訊號執行函式,**子程序,可以用迴圈,一次會**多個,不需要每個程序結束都觸發訊號,從訊號處理函式中**,這樣每次只能**乙個。
sigchld訊號的註冊一定要在程序建立之前(或者在程序結束之前完成)完成。(否則會出現程序已經結束,訊號沒有捕捉到,即殭屍程序)
處理:可以在建立子程序之前遮蔽sigchld訊號
sigset_t myset,oldset;
sigemptyset(&myset);/清空
sigaddset(&myset,sigchld);
sigprocmask(sig_block,&myset,&oldset);//oldset 保留現場,設定了sighld到阻塞訊號集。
註冊訊號之後,需要解除遮蔽現場:
sigpromask(sig_setmask,&oldset,null);
Linux系統程式設計之程序
程序狀態 4 5種 就緒 初始化 執行,掛起 等待 停止 pbc成員 1 程序id 2 程序狀態 3 程序切換需要儲存和恢復的cpu暫存器 4 描述虛擬位址空間資訊 5 描述控制終端的資訊 6 當前工作目錄 7 umask掩碼 8 檔案描述符 9 訊號相關的資訊 10 使用者和使用者組id 11 會...
系統程式設計之程序
一 程序相關概述 1 相關指令 ps aux 檢視所有程序 ps aux grep 程序 只會過濾出指定程序資訊 top 指令類似windows任務管理器 2 程序描述符 pid pid 0 稱為交換程序 程序排程 pid 1 init程序 系統初始化 二 c程式的儲存空間是如何分配的 從高位址到低...
Linux 系統程式設計 之 程序 Process
知識點 1.python 跨平台 因此使用process類 而不使用 fork 2.程序建立格式 p process target p1,args process1 target 為函式名 args 為函式引數 3.p.start 建立子程序 p.join 1 主程序等待子程序 1s p.termi...