Linux中的信号是什么?
生活随笔
收集整理的這篇文章主要介紹了
Linux中的信号是什么?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是信號?
- 操作系統信號,英文signal,簡稱信號。
- 是IPC中唯一一種異步的通信方法。
- 它的本質是用軟件來模擬硬件的中斷機制。
- 信號用來通知某個進程有某個事件發生了。例如,在命令行終端按下某些快捷鍵,就會掛起或停止正在運行的程序。另外,通過kill命令殺死某個進程的操作也有信號的參與。
信號的表示方式?
- 每一個信號都有一個以“SIG”為前綴的名字,例如SIGINT,SIGQUIT,SIGKILL等等。
- 在操作系統內部,這些信號都由正整數表示,這些正整數稱為信號編號。
如何查看操作系統的所有信號?
在Linux操作系統中,通過kill -l來查看所有的信號。
信號如何分類?
- Linux支持的信號有62種。注意:沒有編號為32和33的信號。
- 編號從1到31的信號屬于標準信號。
- 編號從34到64的信號稱為實時信號。
標準信號存在什么問題?
對于同一個進程來說,每種標準信號只會被記錄并處理一次。
如果發送給某一個進程的標準信號有多個,他們的處理順序是不確定。
為什么要有實時信號?
- 實時信號解決了標準信號的兩大問題。同種類的實時信號都可以記錄在案,并且他們可以按照信號的發送順序被處理。
- 已成為事實的標準信號無法被替換,所有標準信號和實時信號共存。
信號的來源有哪些?
- 鍵盤輸入,比如ctrl+c
- 硬件故障
- 系統函數調用
- 軟件中的非法運算
響應信號的方式有哪些?
- 忽略
- 捕捉
- 執行默認操作
進程響應信號的默認方式有哪些?
- 終止進程
- 忽略該信號
- 終止進程并保存內存信息
- 停止進程
- 恢復進程(若進程已停止)
不能自行處理和忽略的信號有哪些?
- SIGKILL和SIGSTOP這兩種信號不能被自行處理,也不能被忽略,對它們的操作只能是系統默認操作。
- 根本原因是為了向系統超級用戶提供使進程終止或停止的可靠方法。
- 這種保障不論對應用程序還是操作系統來說,都是非常有必要的。
示例1:忽略進程信號
package mainimport ("fmt""os""os/signal" )func main() {// 創建一個管道,是Notify的第一個參數的類型sigRecv := make(chan os.Signal, 1)// 發送通知signal.Notify(sigRecv)// 從管道中讀取信號for sig := range sigRecv {fmt.Printf("Received a signal: %s\n", sig)} }示例2:取消通知
package mainimport ("fmt""os""os/signal" )func main() {// 創建一個管道,是Notify的第一個參數的類型sigRecv := make(chan os.Signal, 1)// 發送通知signal.Notify(sigRecv)// 從管道中讀取信號for sig := range sigRecv {fmt.Printf("Received a signal: %s\n", sig)// 取消signal.Stop(sigRecv)close(sigRecv)} }總結
以上是生活随笔為你收集整理的Linux中的信号是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PSP购买导航
- 下一篇: 噪音太大怎么办?简单几步笔记本更安静时间