在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方法退出程式。處...