Я пытаюсь отправить событие CTRL-C в процесс Java, запущенный с exec.
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 не работает на окнах.
Я не хочу УБИТЬ процесс. Я просто хочу изящно закрыть его с помощью CTRL-C.
Я пробовал несколько вещей:
- Вызов Taskkill: процесс реагирует только на принудительное уничтожение.
Использование 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?
Есть идеи?