为了账号安全,请及时绑定邮箱和手机立即绑定

终止java子进程的理想方法是什么?process.destroyForcibly()

终止java子进程的理想方法是什么?process.destroyForcibly()

元芳怎么了 2021-08-19 22:30:30
我有一个创建子进程的 Java Swing 应用程序。主 Swing 应用程序有一个停止按钮,点击后应立即终止子进程。“process.destroy()”不起作用。Process myProcess = new ProcessBuilder("java", "-classpath", System.getProperty("java.class.path"), "MyClass.java");try {    myProcess.waitFor();} catch (Exception e) {    e1.printStackTrace();}...myStopButton.addActionListener(new ActionListener() {    @Override    public void actionPerformed(ActionEvent e) {        myProcess.destroyForcibly();         // myProcess is a really long and complex process. So I could not destroy that using process.destroyForcibly().    }}我可以向子进程发送一些信号以在内部调用 System.exit() 吗?我可以使用“taskkill”来终止子进程吗?
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这真的取决于你的java版本。


在 Java 8 之前


public abstract void destroy()

杀死子进程。该 Process 对象所代表的子进程被强制终止。


爪哇 8


public abstract void destroy()

杀死子进程。此 Process 对象表示的子流程是否被强制终止取决于实现。


public Process destroyForcibly()

杀死子进程。该 Process 对象所代表的子进程被强制终止。此方法的默认实现调用 destroy() ,因此可能不会强制终止进程。强烈鼓励此类的具体实现使用兼容实现覆盖此方法。在 ProcessBuilder.start() 和 Runtime.exec(java.lang.String) 返回的 Process 对象上调用此方法将强制终止进程。


注意:子进程可能不会立即终止。即 isAlive() 可能会在调用 destroyForcibly() 后的短时间内返回 true。如果需要,可以将此方法链接到 waitFor()。


返回: 代表要强制销毁的子进程的 Process 对象。


爪哇 9


public abstract void destroy()

杀死进程。此 Process 对象表示的进程是否正常终止取决于实现。强制进程销毁被定义为立即终止进程,而正常终止允许进程干净地关闭。如果进程不活动,则不采取任何行动。当进程终止时,来自 onExit() 的 CompletableFuture 完成。


public Process destroyForcibly()

强行杀死进程。该 Process 对象所代表的进程被强制终止。强制进程销毁被定义为立即终止进程,而正常终止允许进程干净地关闭。如果进程不活动,则不采取任何行动。当进程终止时,来自 onExit() 的 CompletableFuture 完成。


在 ProcessBuilder.start() 和 Runtime.exec(java.lang.String) 返回的 Process 对象上调用此方法会强制终止进程。


API注意事项:


该过程可能不会立即终止。即 isAlive() 可能会在调用 destroyForcibly() 后的短时间内返回 true。如果需要,可以将此方法链接到 waitFor()。实现要求:该方法的默认实现调用destroy(),因此不能强行终止进程。实现注意:强烈鼓励此类的具体实现使用兼容实现覆盖此方法。


返回:


代表进程被强行销毁的 Process 对象


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 2621 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信