golang 訊號捕捉和處理

2021-07-02 14:59:17 字數 1093 閱讀 5649

捕捉和處理訊號可以實現優雅start和restart等。golang的signal提供了相關的方法。這裡是乙個模板,目錄結構:

├── sig

│   └── sig.go

└── test.go

先看如何呼叫:

1.new出乙個物件

2.register訊號與對應的處理函式

3.定義os.signal型別的channel,呼叫signal.notify

4.for+select迴圈,原有邏輯放在default分支中。

package main

import (

. "./sig"

"fmt"

"os"

"os/signal"

"syscall"

"time")

var stopflag_ bool

func main()

default:

time.sleep(time.duration(3) * time.second)

}}}

func sighandlerfunc(s os.signal, arg inte***ce{})

}

sig包(sig/sig.go)的定義:

package sig

import (

"fmt"

"os")

type signalhandler func(s os.signal, arg inte***ce{})

type signalset struct

func signalsetnew() *signalset

func (set *signalset) register(s os.signal, handler signalhandler) }

func (set *signalset) handle(sig os.signal, arg inte***ce{}) (err error) else

panic("won't reach here")

}

訊號 訊號處理函式(捕捉)

要明白訊號處理函式的使用,就要先知道訊號的捕捉設定,什麼時候會呼叫訊號處理函式和其執行的流程是什麼,下圖完整的展示了訊號捕捉的設定,以及訊號處理函式的觸發機制 所以,從上圖可以知道,只有當程式中斷,異常或系統呼叫,才會進入核心態,也只有進入了核心態才能處理訊號,在這裡初學者常常有乙個誤區,他們會覺得...

Linux訊號捕捉及其處理

一 signal訊號處理機制 可以用函式signal註冊乙個訊號捕捉函式,其函式原型為 include typedef void sighandler t int sighandler t signal int signum,sighandler t handler 下面用乙個例子來介紹signal...

Golang處理訊號

該包中的所有函式,都是處理os.signal的,os.signal用於接受各種型別的訊號,比如中斷 程式終止等,這些訊號的具體作用可以參考 中的介紹。我們根據需要使用中斷,可以控制程式執行時間等。針對linux unix系統處理訊號,有些類似c語言方式,具體可以回顧這篇筆記.啟動乙個訊號的作用,c不...