我注意到,exec.Command即使中断调用已通过signal.Notify. 我已经完成了以下示例来显示问题:
package main
import (
"log"
"os"
"os/exec"
"os/signal"
"syscall"
)
func sleep() {
log.Println("Sleep start")
cmd := exec.Command("sleep", "60")
cmd.Run()
log.Println("Sleep stop")
}
func main() {
var doneChannel = make(chan bool)
go sleep()
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
signal.Notify(c, syscall.SIGTERM)
go func() {
<-c
log.Println("Receved Ctrl + C")
}()
<-doneChannel
}
如果在此程序运行时按下 Ctrl+C,它将打印:
2015/10/16 10:05:50 Sleep start
^C2015/10/16 10:05:52 Receved Ctrl + C
2015/10/16 10:05:52 Sleep stop
显示sleep命令被中断。Ctrl+C 被成功捕获,主程序没有退出,只是sleep命令受到影响。
知道如何防止这种情况发生吗?
守着星空守着你
白衣染霜花
相关分类