java 捕获sigkill_Windows上除SIGKILL以外的其他信号无法终止进程

我正在通过Go启动一个简单的Java应用程序,目的是证明Go可以发送诸如SIGQUIT或SIGTERM之类的信号,而Java可以捕获并适当地处理它(即正常关闭)。当我在命令行上运行Java程序并将其发送给CTRL

+ C时,Java程序正确捕获了信号。

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

这是我的Go代码的相关部分:

开始:

startChan := make(chan bool)

go func(startChan chan

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

}(startChan)

停止:

func (a *App) Stop(timeout time.Duration) {

a.Cmd.Process.Signal(syscall.SIGQUIT) //Does not work

a.Cmd.Process.Signal(syscall.SIGTERM) //Does not work

a.Cmd.Process.Signal(syscall.SIGKILL) //Works

}

顺便说一句,这是在Windows上。我通过启动另一个程序(记事本)进行了尝试,并得到了相同的结果。也就是说,只有SIGKILL可以工作。我已经确认Go正在获取正确的PID,依此类推,因此信号应该到达正确的位置。

关于如何使它起作用的任何想法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值