当前位置:  开发笔记 > 编程语言 > 正文

Java ProcessBuilder process.destroy()不会在winXP中杀死子进程

如何解决《JavaProcessBuilderprocess.destroy()不会在winXP中杀死子进程》经验,为你挑选了1个好方法。

我有一个java应用程序,用于ProcessBuilder准备操作系统命令并给我一个Process对象.(实际的os命令是使用cygwin通过ssh进行rsync).

这在Windows中运行良好,但如果我想停止使用process.destroy()它的过程不会杀死子ssh和rsync进程.....我必须使用Windows任务管理器手动杀死它们..

我可以OutputStream在调用之前获取进程并以某种方式发送一个ctrl-c destroy();吗?

如果有人对解决方法有任何想法,那就太好了.感谢:D



1> Elazar Leibo..:

我也认为模拟Ctrl-C以完全杀死ssh是有问题的.

我会做什么,是以下方法之一.要么使用windows命令来找出谁是ssh的儿子(这有点问题,因为你需要知道你当前的pid才能收到你自己的子进程).我相信sysinternals的pstools是一个很好的命令行工具,可以让你跟踪孤儿进程.请参阅此示例以控制Windows进程taskList.exe(可以以CSV格式BTW提供输出)或执行特殊的VBScript.

第二种方法是使用诸如winp之类的java库来执行和控制ssh进程.我相信如果发送正确的信息是不够的,你可以列出所有的孩子并强行杀死他们.这将是我的首选方法.请注意,killRecursively方法完全符合您的要求.

请注意,这些方法不应仅呈现您的应用程序窗口.您可以将这些封装在一个在Windows和Linux机器上运行方式不同的类中.

请注意我没有尝试对Windows进程进行细粒度控制,因此我不确定我找到的解决方案有多成熟.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有