Tag: 进程

在Java中重定向子进程的I / O(为什么ProcessBuilder.inheritIO()不工作?)

我正在以下列方式启动一个过程。 try { final Process mvnProcess = new ProcessBuilder(“cmd”, “/c”, “mvn”, “–version”) .directory(new File(System.getProperty(“user.dir”))) .inheritIO() .start(); System.exit(mvnProcess.waitFor()); } catch (final IOException ex) { System.err.format(IO_EXCEPTION); System.exit(1); } catch (final InterruptedException ex) { System.err.format(INTERRUPTED_EXCEPTION); System.exit(1); } 由于我调用inheritIO()我期待控制台上的子进程输出,但没有出现。 我在这里想念的是什么? 编辑:我知道我可以使用mvnProcess.getInputStream()并显式读取进程的输出,将其写入循环中的控制台(或其中)。 我不喜欢这个解决方案,因为循环会阻塞我的线程。 inheritIO()看起来很有前途,但显然我不明白它是如何工作的。 我希望这里有人可以对此有所了解。

从java servlet运行长进程的最佳方法是什么?

我想问一下从java servlet运行一个长进程的最佳方法是什么。 我有一个webapp,当客户端发出请求时,它运行一个servlet。 该servlet应从请求中获取一些参数,然后运行一个进程。 此过程可能需要很长时间,因此我需要单独运行它。 完成此过程后,它会发送一封包含结果的电子邮件。 提前致谢。

有没有办法使用java获取/挂钩/附加已经运行的进程?

我希望能够做到这样的事情: Process p = getRunningProcess(pid) 如果有办法,那么创建进程的方式是否重要(使用java,使用python,从shell等等)?

在Java中,是否可以增加JVM的可用内存和/或杀死其他Java程序?

我对高级Java缺乏经验,所以请耐心等待。 我很好奇Java能够实现可能被称为“自主”的function。 假设我们有两个Java程序在运行。 并且一个程序确定另一个程序占用内存,从而杀死该程序和/或为JVM分配更多内存。 我知道在Java中你可以看到可用内存是什么(请参阅如何检查Java中的CPU和内存使用情况? ),但是如果我们想深入挖掘怎么办? 谢谢。

如何在Java中的新进程中启动“main”?

问题很简单。 如何在另一个java进程中启动main方法? 现在我这样做: startOptions = new String[] {“java”, “-jar”, “serverstart.jar”}; new ProcessBuilder(startOptions).start(); 但他们要求我不要使用外部.jar文件。 serverstart.jar显然有一个main方法,但是可以在不调用.jar文件的情况下在另一个进程中调用该main方法吗? 我在考虑这样的事情: new ProcessBuilder(ServerStart.main(startOptions)).start(); 但我不知道是否存在类似的东西。 亲切的问候,

ProcessBuilder – 启动另一个进程/ JVM – HowTo?

我正在编写一个网络应用程序,其中每个客户端都有一个Singleton ClientManager。 为了测试 ,我想创建几个客户端(每个客户端都在自己的VM /进程中),而不是手动启动程序n次。 有关stackoverflow的以下两个问题已经描述了如何做到这一点: 这真的是从Java代码启动第二个JVM的最佳方法吗? Java:在单独的进程中执行Java应用程序 我的代码基于这些,但它不起作用: 调用spawn后,主程序不会继续。 生成的代码不会被执行。 这是使用ProcessBuilder的完整代码: public class NewVM { static class HelloWorld2 { public static void main(String[] args) { System.out.println(“Hello World”); System.err.println(“Hello World 2”); } } public static void main(String[] args) throws Exception { startSecondJVM(HelloWorld2.class, true); startSecondJVM(HelloWorld2.class, false); System.out.println(“Main”); } public static void startSecondJVM(Class clazz, boolean redirectStream) throws […]

是否可以增加java进程(运行时)的大小?

我有一个非常重要的过程在运行。 我无法阻止它,需要扩大java进程的大小! 有没有办法在线增加我的java进程的大小(在运行时)?

如何让java getRuntime()。exec()运行带参数的命令行程序?

我一直在尝试编写一个使用Runtime.getRuntime().exec()方法的java程序来使用命令行来运行程序“tesseract”的实例。 一些背景,Tesseract是一个免费的开源程序,用于在图片上执行OCR(光学字符识别)。 它接收图片文件并输出文本文档。 它是一个使用此命令运行的命令行程序 (从命令提示符shell中) tesseract imageFilePath outFilePath [optional arguments] 例: tesseract “C:\Program Files (x86)\Tesseract-OCR\doc\eurotext.tif” “C:\Users\Dreadnought\Documents\TestingFolder\out” 第一个参数调用tesseract程序,第二个参数是图像文件的绝对路径,最后一个参数是输出文件应该是什么的路径和名称。 Tesseract只需要输出文件的名称,它不需要扩展名。 在命令提示符下工作,这非常有效。 但是,我想从java程序运行它并遇到一些错误。 我发现这个代码作为一个起点非常有用 public class Main { public static void main(String args[]) { try { Runtime rt = Runtime.getRuntime(); String cmdString = “cmd /c dir”; System.out.println(cmdString); Process pr = rt.exec(cmdString); BufferedReader input = new BufferedReader(new InputStreamReader( pr.getInputStream())); […]

TTY在unix ps命令中的含义是什么?

当我运行PS时,其中一列输出是TTY。 这是什么意思? 特别是,作为“??”的价值如何 与“ttys000”比较? 我问,因为我有一个Java程序通过ProcessBuilder执行sort ,当这个程序通过我的IDE(IntelliJ)运行时,该过程比在IDE外部作为可执行jar运行时少5倍。 在每种情况下,我在运行排序时运行ps,唯一的区别是IDE创建一个TTY为??的进程。 而jar创建一个TTY为ttys000的进程。

Java Process.exitValue()中值的含义是什么?

我通过ProcessBuilder使用Process来运行用C代码制作的可执行文件。 我正在捕获Process.exitValue()以对此退出值做出反应。 我注意到并非所有退出值都来自可执行文件。 例如,我得到139的退出值,在我的C代码中没有任何地方返回139的退出值。 我试图找到退出值的概述,但我找不到这个,现在我发现退出值可能与操作系统有关。 (我顺便使用Ubuntu)。 一切顺利的话,似乎唯一的退出值是0。 是否有关于退出值的规范? 我可以确定某个范围只能用于我自己的程序吗? 为操作系统保留了哪些退出代码。 我发现139可能是C代码中的内存错误。 我想摆脱可能。 我无法获得退出值的任何概述(例如139 = …..) 这是简化的代码: ProcessBuilder p = new ProcessBuilder(executableName, executableArguments); final Process shell = p.start(); InputStream shellIn = shell.getInputStream(); int shellExitStatus = shell.exitValue(); 注意:在Ubuntu shell中运行C可执行文件完全没有错误(即退出值0)。 但是,在Java中执行相同的命令会给出退出值139。