当前位置: 首页 > 面试题库 >

Java ProcessBuilder process.destroy()不会杀死WinXP中的子进程

赫连智
2023-03-14
问题内容

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

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

是否有可能OutputStream在我打电话之前以某种方式获取该进程的信息并发送ctrl-c destroy();

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


问题答案:

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

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

第二种方法是使用Java库(例如winp)来执行和控制ssh进程。我相信您可以列出所有子级,并在发送正确消息不够时强行杀死他们。这将是我的首选方法。请注意,killRecursively方法完全可以满足您的需求。

请注意,这些方法不应仅呈现应用程序窗口。您可以将它们封装在可以在Windows和linux计算机上不同地运行的类中。

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



 类似资料:
  • 问题内容: 我从python脚本生成了5个不同的进程,如下所示: 我的问题是,当父进程(主脚本)以某种方式被杀死时,子进程继续运行。 当父进程被杀死时,有没有办法杀死这样生成的子进程? 编辑:我正在尝试: 但这似乎不起作用 问题答案: 我自己也遇到了同样的问题,我有以下解决方案: 打电话之前,您可以设置。然后如此处所述python.org multiprocessing 进程退出时,它将尝试终止其

  • 问题内容: 我正在python中使用subprocess模块​​运行一些shell脚本。如果shell脚本运行时间很长,我想杀死该子进程。我认为如果将其传递给我的陈述就足够了。 这是代码: 我已经用一些运行120秒的shell脚本测试了此调用。我期望子进程在30秒后被杀死,但是实际上该进程正在完成120秒脚本,然后引发了Timeout Exception。现在的问题是如何通过超时杀死子进程? 问题

  • 问题内容: 使用shelljs创建一个子进程 杀死父进程后,子进程仍在运行.. 问题答案: 如果您可以使用node的内置,则可以向子进程发送信号: 这样做的好处是,主进程应该一直徘徊,直到所有子进程都终止。

  • 问题内容: 我正在用C / C ++ 创建子进程。 当父进程结束(或由于某种原因被杀死)时,我也希望所有子进程也被杀死。 这是系统自动完成的吗?还是我必须自己做? 谢谢。 问题答案: 否。如果父进程被杀死,则子进程将成为init进程的子进程(该进程的进程ID为1,并由内核作为第一个用户进程启动)。 初始化过程会定期检查新的子代,然后等待它们(从而释放由其返回值分配的资源)。

  • 问题内容: 我有一个程序生成并与CPU繁重,不稳定的进程通信,而不是由我创建的。如果我的应用程序崩溃或被杀死,我也希望子进程也被杀死,因此用户不必跟踪它们并手动杀死它们。 我知道以前已经讨论过该主题,但是我已经尝试了所有描述的方法,但似乎没有一种方法能够经受住测试的考验。 我知道这是有可能的,因为终端一直在这样做。如果我在终端中运行某些程序并杀死该终端,则这些东西总是会死掉。 我试过了,双叉和。不

  • 问题内容: 我正在使用child_process.spawn()从在Ubuntu上运行的Node.JS应用程序启动脚本。据我所知,标准的分叉或生成的* nix进程通常不会在父进程死后死亡,但是当从Node.JS生成进程时,它们似乎在我的应用程序崩溃或被ctrl-c等终止时被杀死。 。 为什么会这样,并且有解决办法?我似乎在child_process API中找不到任何明显的选项。 我的应用程序启动