Golang中的訊號處理

2021-08-13 19:51:24 字數 3579 閱讀 1894

個平台的訊號定義或許有些不同。下面列出了posix中定義的訊號。

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)

有時候我們想在go程式中處理signal訊號,比如收到sigterm訊號後優雅的關閉程式(參看下一節的應用)。

go訊號通知機制可以通過往乙個channel中傳送os.signal實現。

首先我們建立乙個os.signal channel,然後使用signal.notify註冊要接收的訊號。 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

packagemain

import"fmt"

import"os"

import"os/signal"

import"syscall"

funcmain() ()

// the program will wait here until it gets the

// expected signal (as indicated by the goroutine

// above sending a value on `done`) and then exit.

fmt.println("awaiting signal")

<-done

fmt.println("exiting")

}

go run main.go執行這個程式,敲入ctrl-c會傳送sigint訊號。 此程式接收到這個訊號後會列印退出。

Golang中的訊號處理

linux 使用34 64訊號用作實時系統中。命令man 7 signal提供了官方的訊號介紹。在posix.1 1990標準中定義的訊號列表訊號值 動作說明 sighup 1term 終端控制程序結束 終端連線斷開 sigint 2term 使用者傳送intr字元 ctrl c 觸發 sigqui...

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