一般在執行go run main.go後就會馬上回到命令列
這邊實作當接收到ctrl+c或是終止程式才停止
上程式碼:
func main() {
fmt.Println("start")
errs := make(chan error, 1)
listenForSignal(errs)
c := <-errs
fmt.Println("terminating:", c)
}
func listenForSignal(errChan chan error) {
go func() {
c := make(chan os.Signal)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
errChan <- fmt.Errorf("%s", <-c)
}()
}
說明:
然後執行go run main.go後,會看到服務就一直執行著,再按下ctrl+c
> go run main.go
start
^Cterminating: interrupt
先將main.go編譯成執行檔 -o代表放在目前目錄下 取名為demo
"./"執行demo這檔案
go build -o ./demo main.go
./demo
start
接下來開另一視窗 找出進程跟demo有關的pid 然後執行kill pid,確認已停止了
➜ ~ ps -A | grep demo
14693 ttys000 0:00.00 ./demo
➜ ~ kill 14693
➜ ~ ps -A | grep demo
回到程式執行視窗就會看到以下被中止的訊息了
./demo
start
terminating: terminated
後記:不太知道到底要怎麼要在vscode debug模式
去模擬ctrl+c時會跑到的地方來看程式,google未有結果,無解