发送Ctrl + C到以exec开始的进程

时间:2018-11-12 01:49:27

标签: windows go

我试图将CTRL-C事件发送到以exec开始的Java进程。

cmd := exec.Command("javaw", "-cp", "burst.jar;conf", "brs.Burst") 
cmd.Dir = burstCmdPath
cmd.Env = append(os.Environ())
err = cmd.Start()
...
cmd.Process.Signal(syscall.SIGINT)

不幸的是,SIGINT信号在Windows上不起作用。 我不想杀死这个过程。我只想用CTRL-C优雅地关闭它。

我尝试了几件事:

  1. 调用taskkill:进程只会对强制杀死做出反应。
  2. 使用win32-API:

    ...
    d, err := syscall.LoadDLL("kernel32.dll")               
    p, e := d.FindProc("GenerateConsoleCtrlEvent")
    r, _, e := p.Call(syscall.CTRL_C_EVENT, uintptr(cmd.Process.Pid))
    if r == 0 {
        fmt.Print("GenerateConsoleCtrlEvent: %v\n", e)
    }
    ...
    

    不引发任何错误,但也不起作用。

如果在外壳中打开burst.jar,则可以按CTRL + C发出关闭信号,但是为什么不使用exec? 有什么想法吗?

0 个答案:

没有答案