1楼 @Mericusta 请指教!
我做了一个demo示例,Go程序调用的一个子程序myFakeTool,很简单的代码生成的。
myFakeTool的代码:
func main(){
sigChan := make(chan os.Signal)
signal.Notify(sigChan)
select{
case sig:=<-sigChan:
fmt.Println("接受到来自系统的信号:",sig)
}
}
myFakeTool就是模拟一个引用Ctrl+C信号的小程序。
主Go程序如下:
func subProgram() {
cmdString := "myFakeTool This_Is_Test_For_Ctrl_C"
cmd := exec.Command(os.Getenv("SHELL"), "-c", cmdString)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
fmt.Println(cmdString, "...")
err := cmd.Run()
if err != nil {
fmt.Println("Command Error!")
}
fmt.Printf("pid is %0d.\n", cmd.Process.Pid)
}
func main() {
globalWg.Add(1)
go func() {
subProgram()
globalWg.Done()
}()
fmt.Println("start main programme.")
time.Sleep(time.Duration(10) * time.Second)
time.Sleep(time.Duration(100) * time.Second)
globalWg.Wait()
fmt.Println("end main programme.")
}
可是程序运行起来没有达到效果,子程序没有捕捉到Ctrl+C。
请大佬指点!