问题描述
signal.Notifyexec.Command
exec.Commandsignal.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,它将打印:
If Ctrl+C is pressed while this program is running, it's going to print:
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
sleepsleep
sleepsleep
知道如何防止这种情况发生吗?
Any idea how to prevent this from happening?
推荐答案
ctrl+c
ctrl+c
SetpgidPgidsyscall.SysProcAttr
SetpgidPgidsyscall.SysProcAttr
cmd := exec.Command("sleep", "60")
cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
}
这篇关于防止 Ctrl+C 中断 Golang 中的 exec.Command的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,WP2