[Go 04] 信號處理和退出程式
一般在執行go run main.go後就會馬上回到命令列,
這邊實作當接收到ctrl+c或是終止程式才會停止程式
本文說明:
- go實作接收命令而中止程式.
- 會用到channel管道來進行阻塞,並接收os/signal訊號
程式碼:
1 | func main() { |
說明:
使用”os/signal”包,用來接收訊號使用,notify方法用来監聽收到的信號(stop方法則取消)
* SIGINT 表示用户按下INTR字符(Ctrl+C)觸發
* SIGTERM 结束程序 kill pid的作用是向進程為pid的程序发送SIGTERM
* 其他像是SIGKILL kill -9 pid則是發送立即終止 等等就先不使用
測試接收SIGINT
然後執行go run main.go後,會看到服務就一直執行著,再按下ctrl+c
1 | > go run main.go |
測試接收SIGTERM
先將main.go編譯成執行檔 -o代表放在目前目錄下 取名為demo
“./“執行demo這檔案
1 | go build -o ./demo main.go |
接下來開另一視窗 找出進程跟demo有關的pid 然後執行kill pid,確認已停止了
1 | ➜ ~ ps -A | grep demo |
回到程式執行視窗就會看到以下被中止的訊息了
1 | ./demo |
後記疑問:
- 不太知道到底要怎麼要在vscode debug模式
去模擬ctrl+c時會跑到的地方來看程式,google未有結果,無解 - 在linux環境有效,win環境搜尋無解
[Go 04] 信號處理和退出程式