Unix信號
編輯使用 Unix 操作系統時,信號是發送給正在運行的進程的系統消息。 信號是進程間通信的一種原始形式。 大多數信號也會引起一個動作——通常是進程的終止。 另一方面,其他人僅供參考(例如 SIGWINCH)或可以停止進程(SIGSTOP)。 還有一些信號可以由用戶自由使用(SIGUSR1 和 SIGUSR2)。 一些信號可以被進程攔截或抑制。 所以抓住z。 例如,某些服務器程序(Unix 術語中的“守護進程”)讀取 SIGUSR1 或 SIGUSR2,然后再次讀入它們的配置文件。
常見的 UNIX 信號
編輯下面列出了常用信號及其編號。 支持的信號及其值可能因系統而異。 POSIX.1標準根據所使用的硬件架構提供不同的數值。
前綴 SIG 是信號的縮寫。
kill -l 命令通常會列出所有支持的信號編號及其相關名稱。 下表包含以下值作為示例:
- A 列:GNU C 庫
- B 列:Linux、Alpha 和 SPARC 架構
- C 列:Linux、x86、AMD64、ARM 和大多數其他處理器架構
- D 列:Linux、MIPS
除了通常的 31 個信號編號外,較新的 Linux 版本還使用多達 32 個附加信號作為實時信號:從 SIGRTMIN、33、34 或 35(取決于 C 庫)到 SIGRTMAX (64)。
動作
編輯信號可以觸發以下操作之一:
- 停止(不是終止)進程。
- 恢復之前掛起的進程。
- 在不轉儲的情況下結束進程。 父進程可以確定信號編號。 該數字包含在 wait、waitpid 等函數的結果中。
- 通過寫入內存轉儲結束進程。
在許多系統上,可以限制轉儲(例如在 bash 中通過 ulimit -c)。信號編號包含在轉儲中。 父進程可以像退出一樣不轉儲得到信號號。
除了最后一個動作(信號處理程序)外,這些動作都顯示為標準(默認)動作。
改變動作
編輯除了 SIGKILL 和 SIGSTOP 信號外,對信號的反應可以由進程設置。 這有幾種可能性。 一種方法是在 System V 和 ANSI C 中通過信號函數實現的。這個函數可以從許多程序環境中訪問,例如陷阱在通常的 shell 或 Python 編程語言中同名模塊中的函數信號中。 此外,Berkeley Software Distribution (BSD) 中有一些選項可以阻止信號并稍后處理它們(sigvec 等)。 還有 POSIX 標準 (sigaction)。
信號由一個簡單的數據類型表示,即數字,通常指定為符號常量。 筆譯員或口譯員確定符號的編號。 這允許將程序移植到其他 (Unix) 平臺而無需更改符號。 POSIX 為不同的硬件平臺指定了不同的信號編號。 信號編號由 signal.h、signal.py 等文件已知。
信號處理程序是一個簡單的函數,它將信號編號作為參數。 BSD 和 POSIX 有額外的參數。 信號處理程序可以在程序中設置變量并調用函數(例如退出以結束進程)。
作為信號處理程序,上述函數知道特殊的符號常量:
- SIG_DFL 設置信號的正常默認操作。
- SIG_IGN 導致信號被忽略。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/366169/