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

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

这在Windows中运行良好,但是如果我想使用process.destroy()停止进程,它不会杀死子ssh和rsync进程…..

我必须使用Windows任务管理器手动杀死它们.

是否可以获取进程的OutputStream并在调用destroy()之前以某种方式发送ctrl-c;?

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

谢谢,

d

解决方法:

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

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

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

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

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

标签:java

来源: https://codeday.me/bug/20191002/1843347.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值