Articles of processbuilder

java.io.IOException:错误= 11

我遇到了Java ProcessBuilder一个奇怪的问题。 代码如下所示(略为简化) public class Whatever implements Runnable { public void run(){ //someIdentifier is a randomly generated string String in = someIdentifier + "input.txt"; String out = someIdentifier + "output.txt"; ProcessBuilder builder = new ProcessBuilder("./whateveer.sh", in, out); try { Process process = builder.start(); process.waitFor(); } catch (IOException e) { log.error("Could not launch process. Command: " […]

打开一个shell并在java中与其I / O进行交互

我想打开一个shell(xterm)并与之交互(写入命令并读取shell的输出) 这是一个不能工作的代码示例: public static void main(String[] args) throws IOException { Process pr = new ProcessBuilder("xterm").start(); PrintWriter pw = new PrintWriter(pr.getOutputStream()); pw.println("ls"); pw.flush(); InputStreamReader in = new InputStreamReader(pr.getInputStream()); System.out.println(in.read()); } 当我执行这个程序时,打开一个“xterm”窗口并且不input“ls”命令。 只有当我closures窗口,我得到一个“-1”打印,没有任何东西从shell读取 重要- 我知道我可以使用: Process pr = new ProcessBuilder(“ls”)。start(); 要获得输出,但我需要打开其他用途的“xterm” 非常感谢

无法使用ProcessBuilder运行程序,从命令行运行良好

在Linux(debian)上,我可以运行这个命令: /usr/lib/jvm/jdk1.7.0_21/bin/java -jar ~/myjar.jar ".*" 我试图从Java程序运行它,而不是: ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", "\".*\""); System.out.println(pb.command()); 按预期打印以下内容: [/usr/lib/jvm/jdk1.7.0_21/bin/java, -jar, ~/myjar.jar, ".*"] 但是,我没有得到相同的程序输出(它运行,但输出看起来好像".*"参数没有适当考虑)。 任何想法,为什么它不工作? 注意:相同的代码在Windows上工作正常。

如何终止通常使用ProcessBuilder创build的进程

我在我的Java应用程序中使用ProcessBuilder创buildstream程。 创build的进程执行一些FFMPEG命令,这些命令实际上复制了指定的目标媒体文件中的RTSPstream。 ProcessBuilder builder = new ProcessBuilder("ffmpeg", "-i", RTSP_URL, "-f", fileFormat, destFilePath); Process processToExecute = builder.start(); 我想在完成执行之前closures进程。 所以,如果我直接在Windows CMD中运行这个FFMPEG命令,然后在5秒钟后按'CTRL + C',那么进程终止状态为'2'。 我可以播放迄今为止创build的媒体文件。 所以,如果我使用以下方法在Java应用程序中执行相同的操作: process.destroy(); //I call this method after 5 sec 我得到状态码“1”,意思是exception终止。 我通过以下方式获得状态: processToExecute.destroy(); processToExecute.exitValue(); //This return me status '1' 而且我不能播放媒体文件,我认为这是由于进程的exception终止。 那么,我怎样才能终止使用ProcessBuilder创build的进程,就像我们用CMD(CTRL + C)所做的那样,以便我可以播放创build的媒体文件? 我想在使用CMD终止进程时得到的状态代码为“2”的Java应用程序中终止进程(使用ProcessBuilder创build)。 编辑#01:—共享调查结果 所以,当我尝试删除该文件,一旦应用程序终止,我得到以下错误: The Action Can't be Performed Because File is […]

ProcessBuilder为命令行添加额外的引号

我需要使用ProcessBuilder构build以下命令: "C:\Program Files\USBDeview\USBDeview.exe" /enable "My USB Device" 我试着用下面的代码: ArrayList<String> test = new ArrayList<String>(); test.add("\"C:\\Program Files\\USBDeview\\USBDeview.exe\""); test.add("/enable \"My USB Device\""); ProcessBuilder processBuilder = new ProcessBuilder(test); processBuilder.start().waitFor(); 但是,这会将以下内容传递给系统(使用Sysinternals Process Monitor进行validation) "C:\Program Files\USBDeview\USBDeview.exe" "/enable "My USB Device"" 注意/enable前的报价和Device之后的两个报价。 我需要摆脱这些额外的引号,因为他们使调用失败。 有谁知道如何做到这一点?

Java ProcessBuilder:结果进程挂起

我一直在尝试使用Java的ProcessBuilder在Linux中启动应该“长期”运行的应用程序。 这个程序运行的方式是启动一个命令(在这种情况下,我启动一个媒体播放应用程序),让它运行,并检查,以确保它没有崩溃。 例如,检查PID是否仍然有效,然后重新启动进程,如果它已经死了。 我现在得到的问题是,PID在系统中保持活动状态,但应用程序的GUI挂起。 我尝试将ProcessBuilder(cmd).start()转换为一个单独的线程,但似乎没有解决任何问题,正如我所希望的那样。 基本上,对于用户来说,程序APPEARS已经崩溃,但是杀死驱动ProcessBuilder.start()进程的Java进程实际上允许创build的进程恢复其正常行为。 这意味着Java应用程序中的某些内容正在干扰生成的进程,但我完全不知道在这一点上是什么。 (因此,为什么我试图把它分成另一个线程,这似乎没有解决任何问题) 如果有人有任何意见或build议,请让我知道,因为我不能为了我的生活而想到如何解决这个问题。 编辑:我不关心从stream程创build的I / Ostream,因此没有采取任何措施来处理 – 这可能会导致stream程本身的挂起?