golang捕獲ctrl c退出程式

2021-07-10 06:41:53 字數 1331 閱讀 2647

在golang當中如何捕獲ctrl+c命令,讓程式有序的的退出?

首先測試一段golang**,捕獲sigint和sigkill

c := make(chan os.signal, 1)

signal.notify(c, os.interrupt, os.kill)

s := <-c

fmt.println("got signal:", s)

在多goroutines當中如何退出?我們假設有乙個生產者,乙個消費者,這個時候應該讓生產者去捕獲訊息,關閉channel,生產者退出;消費者感知到channel關閉,消費者退出。

package main

import (

"time"

"fmt"

"os"

"os/signal"

"sync"

)var c chan os.signal

var msgqueue chan *string

var wg sync.waitgroup

func producer()

i ++

s := fmt.sprintf("work-%d", i)

fmt.println("producer | produce", s)

msgqueue <- &s

time.sleep(500 * time.millisecond)

}close(msgqueue)

fmt.println("producer | close channel, exit")

wg.done()

}func consumer()else

}fmt.println("consumer | exit")

wg.done()

}func main()

執行結果:

producer | produce work-1

consumer | consume work-1

producer | produce work-2

consumer | consume work-2

producer | produce work-3

consumer | consume work-3

producer | produce work-4

consumer | consume work-4

producer | get interrupt

producer | close channel, exit

consumer | exit

參考:

1.

golang 異常退出堆疊捕獲

利用golang自帶包 runtime debug 異常時列印 package main import fmt os runtime debug time func trye exename os.args 0 獲取程式名稱 now time.now 獲取當前時間 pid os.getpid 獲取程...

ctrl c退出python多執行緒程式

多工並行處理多數需要用到多執行緒,第一次用python寫乙個任務,需要同時監控兩個狀態,就使用了下多執行緒,但測試時候ctrl c居然退不出,我以為是bug,結果看了下確實是這樣的。如果乙個python程式用了多執行緒,當子執行緒沒有結束時,用ctrl c是關閉不了主線程的,這時候就只能用kill命...

Python 捕捉Ctrl C退出指令碼程式

當我們的指令碼程式進入死迴圈或者卡在某個耗時操作,需要退出程式時,一般都是使用ctrl c來殺死程序,那麼,如何在程式裡進行這個操作呢?實際上,在命令列輸入ctrl c的原理是觸發了 sigint 訊號,所以我們需要捕捉這個訊號。使用signal模組開捕捉訊號,並使用sys的exit方法退出程式。處...