1. 程式人生 > >【Golang】關於訊號signal處理

【Golang】關於訊號signal處理

我們在生產環境下執行的系統要求優雅退出,即程式接收退出通知後,會有機會先執行一段清理程式碼,將收尾工作做完後再真正退出。我們採用系統Signal來 通知系統退出,即kill pragram-pid。我們在程式中針對一些系統訊號設定了處理函式,當收到訊號後,會執行相關清理程式或通知各個子程序做自清理。kill -9強制殺掉程式是不能被接受的,那樣會導致某些處理過程被強制中斷,留下無法恢復的現場,導致訊息被破壞,影響下次系統啟動執行。

最近用Golang實現的一個代理程式也需要優雅退出,因此我嘗試瞭解了一下Golang中對系統Signal的處理方式,這裡和大家分享。Golang 的系統訊號處理主要涉及os包、os.signal包以及syscall包。其中最主要的函式是signal包中的Notify函式:

func Notify(c chan<- os.Signal, sig …os.Signal)

該函式會將程序收到的系統Signal轉發給channel c。轉發哪些訊號由該函式的可變引數決定,如果你沒有傳入sig引數,那麼Notify會將系統收到的所有訊號轉發給c。如果你像下面這樣呼叫Notify:

signal.Notify(c, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2)

則Go只會關注你傳入的Signal型別,其他Signal將會按照預設方式處理,大多都是程序退出。因此你需要在Notify中傳入你要關注和處理的Signal型別,也就是攔截它們,提供自定義處理函式來改變它們的行為。

相關推薦

Golang關於訊號signal處理

我們在生產環境下執行的系統要求優雅退出,即程式接收退出通知後,會有機會先執行一段清理程式碼,將收尾工作做完後再真正退出。我們採用系統Signal來 通知系統退出,即kill pragram-pid。我們在程式中針對一些系統訊號設定了處理函式,當收到訊號後,會執行

MATLAB 訊號處理工具箱之 fft 案例分析

上篇博文:【 MATLAB 】訊號處理工具箱之fft簡介及案例分析介紹了MATLAB訊號處理工具箱中的訊號變換 fft 並分析了一個案例,就是被噪聲汙染了的訊號的頻譜分析。 這篇博文繼續分析幾個小案例: Gaussian Pulse 這個案例是將高斯脈衝從時域變換到頻域,高斯脈衝的資

MATLAB 訊號處理工具箱之fft簡介及案例分析

目錄   Syntax Description Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) Examples Noisy Signal Syntax Y = fft(X) Y = fft(X

MATLAB 訊號處理工具箱之 ifft 簡介及案例分析

這篇博文和上篇博文對應:【 MATLAB 】訊號處理工具箱之fft簡介及案例分析 目錄 ifft Syntax Description 案例分析 Inverse Transform of Vector Padded Inverse Transform of Matri

MATLAB 訊號處理工具箱之 dct 簡介及案例分析

dct Discrete cosine transform Syntax y = dct(x) y = dct(x,n) y = dct(x,n,dim) y = dct(___,'Type',dcttype) Description y = dct(x)

MATLAB 訊號處理工具箱的訊號產生函式之 sawtooth 函式簡記

 sawtooth 函式 x = sawtooth(t) generates a sawtooth wave with period 2π for the elements of the time

MATLAB 訊號處理工具箱

這個總結可以說是一個簡潔的訊號處理工具大全了,我覺得它的作用是讓人開闊眼界,以整體來認識訊號處理工具箱。 可以根據裡面的內容,查閱matlab的幫助文件,去學習訊號處理的相關知識等。 濾波器設計與分析:

MATLAB 訊號處理工具箱之波形產生函式 pulstran

前兩篇博文和這篇博文有些許聯絡: MATLAB幫助文件稱pulstran函式為:脈衝串(Pulse train)產生函式。 pulstran從連續函式或採樣原型脈衝生成脈衝序列。 語法格式:

跟著我們學Golang之異常處理

Java中的異常分為Error和Exception來處理,這裡也以錯誤和異常兩種,來分別講一講Go的異常處理。 Go 語言沒有類

基礎C#異常處理的總結

ember -s 有效 理解 dac 十進制 reference bsp msil 一、異常處理的理解? 異常處理是指程序在運行過程中,發生錯誤會導致程序退出,這種錯誤,就叫做異常。 因此處理這種錯誤,就稱為異常處理。 二、異常處理如何操作? C# 異常處

JSP 日期處理

ans font 日期和時間 strong borde body 字符串 1970年1月1日 ise 使用JSP最重要的優勢之一,就是可以使用所有Java API。本章將會詳細地講述Java中的Date類,它在java.util包下,封裝了當前日期和時間。 Date類有兩

綜合事務的處理及隔離級別

產生 數據表 查看 普通 模式 再次 blank 並發執行 gpo 原文地址:http://blog.csdn.net/qiaoge134/article/details/20031949 事務的隔離級別: 先說說 (通俗說) 1. 臟讀:是一個事務讀取了 其他事務沒有

JS.JS事件處理函數中return的作用

檢測 也會 post 繼續 .cn add AR 當前 進行 1、js事件處理函數中return的作用 - AnswerCard - 博客園.html(https://www.cnblogs.com/answercard/p/5255230.html) 2、網頁內容保存:

WIPSwift4 異常處理

class bsp 捕捉 ext 利用 str ble nbsp o-c 創建: 2018/03/24 【任務表】TODO 異常處理語法 異常的發生 異常的傳播與捕捉 呼出會拋出異常的函數的方法 do-catch

Golang讀源碼知 encode/binary

傳遞 規則 AR 不能 反序列化 lan light str window go version go1.9.2 windows/amd64 如果你覺得xml,json等不能滿足你程序的需要,那麽你可能用到傳統的二進制協議來作為服務之間數據協議 1. 頂層結構可以

Golang如何不反序列化為前提的情況下,修改ProtoBuffer某個Tag的值

刪除 tag mage msg 挑戰 客戶 Golan protobuff 直接 當你從客戶端接收到一串序列化後的數據,你需要   - 修改其中某一個標簽的值,然後把它傳遞到真正的業務數據,這樣每個業務模塊(微服務)就不需要和公共授權服務打交道了。   - 因為傳

Python文件處理

sep shu l命令 文本 運行 刪除目錄 如何 空目錄 緩沖 原文地址:http://www.cnblogs.com/juandx/p/4962089.html python 讀寫、創建 文件python中對文件、文件夾(文件操作函數)的操作需要涉及到os模塊和shut

Nginx訊號

TERM, INT Quick shutdown     QUIT Graceful shutdown 優雅的關閉程序,即等請求結束後再關閉 KILL

面向物件day08:異常處理(六)

本節內容 1、概述 2、異常梳理 3、異常梳理流程圖 4、異常大全 5、自定義異常 一、概述   異常處理是當程式出錯了,但是我們又不想讓使用者看到這個錯誤,而且我在寫程式的時候已經預料到了它可以出現這樣的錯誤,出現這樣的錯誤代表著什麼,我們可以提前處理這些個錯誤 二、異常處理 2.1 處理

ADNI資料預處理(6)ADNI_slice_dataloader ||| show image

ADNI Series 1、【ADNI】資料預處理(1)SPM,CAT12 2、【ADNI】資料預處理(2)獲取 subject slices 3、【ADNI】資料預處理(3)CNNs 4、【ADNI】資料預處理(4)Get top k slices according to CNN