我试图将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优雅地关闭它。
我尝试了几件事:
使用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? 有什么想法吗?