一般在执行go run main.go后就会马上回到命令列
这边实作当接收到ctrl+c或是终止程式才停止
上程式码:
func main() {fmt.Println("start")errs := make(chan error, 1)listenForSignal(errs)c := <-errsfmt.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)}()}
说明:
使用"os/signal"包用来接收讯号使用,notify方法用来监听收到的信号(stop方法则取消)SIGINT表示用户按下INTR字符(Ctrl+C)触发SIGTERM结束程序 kill pid的作用是向进程为pid的程序发送SIGTERM其他像是SIGKILL kill -9 pid则是发送立即终止 等等就先不使用
测试接收SIGINT
然后执行go run main.go后,会看到服务就一直执行着,再按下ctrl+c
> go run main.gostart^Cterminating: interrupt
测试接收SIGTERM
先将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
回到程式执行视窗就会看到以下被中止的讯息了
./demostartterminating: terminated
后记:不太知道到底要怎么要在vscode debug模式
去模拟ctrl+c时会跑到的地方来看程式,google未有结果,无解