Golang中的訊號處理

2021-08-21 07:45:19 字數 2623 閱讀 4805

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...