Отправка Ctrl + C в процесс, запущенный с exec - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь отправить событие 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.

Я пробовал несколько вещей:

  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? Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...