小编Mik*_*gio的帖子

SIGKILL 以外的信号不会终止 Windows 上的进程

我正在通过 Go 启动一个简单的 Java 应用程序,目的是证明 Go 可以发送像 SIGQUIT 或 SIGTERM 这样的信号,并且 Java 可以捕获并适当地处理它(即正常关闭)。当我在命令行上运行 Java 程序并向其发送 CTRL+C 时,Java 程序正确地捕获了信号。

但是,当我通过 Go 启动 Java 程序并尝试向进程发送信号时,Java 进程既不会终止,也不会处理信号。唯一有效的方法是 SIGKILL,它当然不会被捕获,只会杀死进程。

以下是我的 Go 代码的相关部分:

开始:

startChan := make(chan bool)
go func(startChan chan<- bool) {
    a.Cmd = exec.Command("java", "-jar", "C:\\Code\\sigterm\\TestApp.jar")
    a.Cmd.Stdout = os.Stdout
    a.Cmd.Stderr = os.Stderr

    launchErr := a.Cmd.Start()
    if launchErr != nil {
        fmt.Println("Unable to start app:" + launchErr.Error())
    }
    startChan <- true
}(startChan)
Run Code Online (Sandbox Code Playgroud)

停止:

func (a *App) Stop(timeout time.Duration) {
  a.Cmd.Process.Signal(syscall.SIGQUIT) //Does not work
  a.Cmd.Process.Signal(syscall.SIGTERM) …
Run Code Online (Sandbox Code Playgroud)

signals go

2
推荐指数
1
解决办法
1353
查看次数

标签 统计

go ×1

signals ×1