草庐IT

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

我有一个java应用程序,它使用ProcessBuilder来准备操作系统命令并给我一个Process对象。(实际的操作系统命令是使用cygwin通过ssh进行rsync)。这在Windows中运行良好,但是如果我想使用process.destroy()停止进程,它不会终止子ssh和rsync进程.....我必须使用Windows任务管理器手动杀死它们..在我调用destroy();之前,是否可以获取进程的OutputStream并以某种方式发送ctrl-c?如果有人对解决方法有任何想法,那就太好了。谢谢, 最佳答案 我还认为模拟C

java - 从 Java 运行交互式命令行应用程序

我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,它可以很好地处理运行完成命令。例如,这将在工作目录中使用参数“myArg”运行“myProgram”:ListcommandLine=newArrayList();commandLine.add("myProgram");commandLine.add("myArg");ProcessBuilderbuilder=newProcessBuilder(commandLine);builder.redirectErrorStream(true);Processprocess=

java - 在 Eclipse 中每次运行之前关闭 Java 应用程序

我希望Java项目(和C++,如果你也知道的话)的运行命令(通常默认为CTRL+F11组合)自动关闭它之前启动的前一个进程(或所有进程,如果更容易的话)运行一个新实例。简而言之,运行一个项目也应该关闭之前的应用程序实例。可能吗?也许可以将代码添加到应用程序本身,并在我不再需要它时将其禁用?我想要它,因为每次关闭应用程序都很烦人。我不需要那么多应用实例。 最佳答案 在EclipseNeon中,转到Window->Preferences->Run/Debug->Launching并在LaunchOperation部分检查:[X]启动时终

java - 命令行终端在进程上执行并从此进程输入交互

这个问题在这里已经有了答案:runinteractivecommandlineapplicationfromjava(2个答案)关闭6年前。基本上,当我在我的Java应用程序上按下按钮时,我有一个运行的进程。并且这个过程向操作系统的终端执行命令。但有时此命令需要与用户进行交互。我想知道是否可以在需要时让流程与用户进行交互?我的代码:FilemarsSimulator=newFile("resources/mars_simulator/Mars4_5.jar");if(marsSimulator.exists()&&temp.exists()){Stringres="";try{Proc

java - 在 Java 中,将命令发送到另一个命令行程序

我在WindowsXP上使用Java,并希望能够向另一个程序(如telnet)发送命令。我不想简单地执行另一个程序。我想执行它,然后在它运行后向它发送一系列命令。这是我想做的代码,但它不起作用:(如果您取消注释并将命令更改为“cmd”,它会按预期工作。请帮忙。)这是一个简化的例子。在生产环境中,将发送更多命令,因此请不要建议调用“telnetlocalhost”。try{Runtimert=Runtime.getRuntime();Stringcommand="telnet";//command="cmd";Processpr=rt.exec(command);BufferedRead

java - ProcessBuilder和Process.waitFor(),它等了多久?

我正在使用ProcessBuilder从java执行一个.exe文件类和Process类(class)。解释我在做什么:builder=newProcessBuilder(commands);builder.redirectErrorStream(true);Processprocess=builder.start();process.waitFor();我只是想知道,“waitFor()”要等多久?是等到我的.exe执行完毕,还是等到它执行完毕?我的.exe是编译好的AutoIt脚本。这意味着,可能会有像鼠标移动这样的交互,这需要一些时间。所以我需要知道我的Java代码在调用.exe

java - 是否可以有一个 "in-process"Tomcat 实例,用于测试目的?

我有一个基于Maven的Web应用程序项目,它生成一个要在Tomcat中运行的WAR。让我们假设,为了论证,该项目的单元测试通过网络实际发送/接收请求(而不是简单地使用模拟请求调用servlet方法)至关重要。有什么方法可以让我的测试工具在同一个JVM中运行Tomcat实例,加载当前项目,并让测试用例在localhost上命中它?如果做不到这一点,我实际上如何以编程方式将当前项目(以及依赖项)打包到WAR中,以便我可以使用Cargo以编程方式将其上传到其他Tomcat实例?有没有比直接使用mvn更好的选择?我知道我的要求不寻常,单元测试应该更加独立等等,但请让我们一起玩吧:)

java - 如果父级不使用 Java 中的 stdout/stderr,为什么进程会挂起?

我知道,如果您在Java中使用ProcessBuilder.start启动外部进程,您必须使用它的stdout/stderr(例如,参见here)。否则外部进程会在启动时挂起。我的问题是为什么它以这种方式工作。我的猜测是JVM将执行进程的stdout/stderr重定向到管道,如果管道没有空间,则写入管道block。有道理吗?现在我想知道为什么Java这样做。这种设计背后的基本原理是什么? 最佳答案 Java在这方面没有做任何事情。它只是使用操作系统服务来创建管道。所有Unix类操作系统和Windows在这方面的行为都相同:在父子之

java - 如何在 Java 中将子进程 stdout/stderr 重定向到主进程 stdout/stderr?

在其他语言中(如bash和Python),当我们生成一个子进程时,这个新进程将从父进程继承stdout和stderr。这意味着子进程的任何输出都将打印到终端以及父进程的输出。我们如何在Java中实现相同的行为?我的第一次尝试是:proc=Runtime.getRuntime().exec(cmd);但它不会起作用。基于thisanswer和thisanswer,我已将代码替换为:ProcessBuilderpb=newProcessBuilder(cmd);pb.redirectOutput(System.out);pb.redirectError(System.err);但这甚至无法

java - Process Builder waitFor() 问题和打开文件限制

我继承了一些代码:Processp=newProcessBuilder("/bin/chmod","777",path).start();p.waitFor();基本上,将键/值对作为文件存储在磁盘上是出于一些古老且高度基于巫术的原因。我真的不想深入。但是,我留下了一堆IO异常:Exception:Cannotrunprogram"/bin/chmod":java.io.IOException:error=24,ToomanyopenfilesMessage:Cannotrunprogram"/bin/chmod":java.io.IOException:error=24,Tooman