linux 使用34-64訊號用作實時系統中。命令man 7 signal
提供了官方的訊號介紹。
在posix.1-1990標準中定義的訊號列表訊號值
動作說明
sighup
1term
終端控制程序結束(終端連線斷開)
sigint
2term
使用者傳送intr字元(ctrl+c)觸發
sigquit
3core
使用者傳送quit字元(ctrl+/)觸發
sigill
4core
非法指令(程式錯誤、試圖執行資料段、棧溢位等)
sigabrt
6core
呼叫abort函式觸發
sigfpe
8core
算術執行錯誤(浮點運算錯誤、除數為零等)
sigkill
9term
無條件結束程式(不能**獲、阻塞或忽略)
sigsegv
11core
無效記憶體引用(試圖訪問不屬於自己的記憶體空間、對唯讀記憶體空間進行寫操作)
sigpipe
13term
訊息管道損壞(fifo/socket通訊時,管道未開啟而進行寫操作)
sigalrm
14term
時鐘定時訊號
sigterm
15term
結束程式(可以**獲、阻塞或忽略)
sigusr1
30,10,16
term
使用者保留
sigusr2
31,12,17
term
使用者保留
sigchld
20,17,18
ign子程序結束(由父程序接收)
sigcont
19,18,25
cont
繼續執行已經停止的程序(不能被阻塞)
sigstop
17,19,23
stop
停止程序(不能**獲、阻塞或忽略)
sigtstp
18,20,24
stop
停止程序(可以**獲、阻塞或忽略)
sigttin
21,21,26
stop
後台程式從終端中讀取資料時觸發
sigttou
22,22,27
stop
後台程式向終端中寫資料時觸發
在susv2和posix.1-2001標準中的訊號列表:訊號值
動作說明
sigtrap
5core
trap指令觸發(如斷點,在偵錯程式中使用)
sigbus
0,7,10
core
非法位址(記憶體位址對齊錯誤)
sigpoll
term
pollable event (sys v). synonym for sigio
sigprof
27,27,29
term
效能時鐘訊號(包含系統呼叫時間和程序占用cpu的時間)
sigsys
12,31,12
core
無效的系統呼叫(svr4)
sigurg
16,23,21
ign有緊急資料到達socket(4.2bsd)
sigvtalrm
26,26,28
term
虛擬時鐘訊號(程序占用cpu的時間)(4.2bsd)
sigxcpu
24,24,30
core
超過cpu時間資源限制(4.2bsd)
sigxfsz
25,25,31
core
超過檔案大小資源限制(4.2bsd)
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
)func main()
}func signallisten()
}
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
)//建立監聽退出chan
var c = make(chan os.signal)
func main()
}func signalprocess()
} return
}func exitfunc()
上面的例子可以應用於,demo通過startprocess啟動了很多子程序,當前程式如果退出,不管理這些子程序,那麼他們將成為孤兒程序被init程序接管,如果這些程序,占用了公共資源,比如埠,那麼下次啟動demo,埠將被占用,無法正常使用。那麼我們就可以通過此方法來監聽訊號,盡可能的避免這種情況產生。
儘管如此,還有一些情況是我們無法處理的,比如:sigkill,sigstop這兩個訊號,是無法**捉到的,也就是說,如果通過這兩個訊號結束程式,我們還是無法處理善後工作。
Golang中的訊號處理
個平台的訊號定義或許有些不同。下面列出了posix中定義的訊號。linux 使用34 64訊號用作實時系統中。命令man 7 signal提供了官方的訊號介紹。在posix.1 1990標準中定義的訊號列表訊號值 動作說明 sighup 1term 終端控制程序結束 終端連線斷開 sigint 2t...
Golang處理訊號
該包中的所有函式,都是處理os.signal的,os.signal用於接受各種型別的訊號,比如中斷 程式終止等,這些訊號的具體作用可以參考 中的介紹。我們根據需要使用中斷,可以控制程式執行時間等。針對linux unix系統處理訊號,有些類似c語言方式,具體可以回顧這篇筆記.啟動乙個訊號的作用,c不...
golang 訊號捕捉和處理
捕捉和處理訊號可以實現優雅start和restart等。golang的signal提供了相關的方法。這裡是乙個模板,目錄結構 sig sig.go test.go 先看如何呼叫 1.new出乙個物件 2.register訊號與對應的處理函式 3.定義os.signal型別的channel,呼叫sig...