Articles of runtime.exec

更改Runtime.getRuntime()。exec进程上的进程组

我需要能够从java内部启动和停止外部程序。 我已经开始工作了,但是当我停止时,它杀死了它的父母。 事实certificate,我开始的过程是杀死它的整个进程组0. kill有没有人知道如何使它,以便我的java进程不在子程序的进程组?

发送命令到terminal从Java的空间

我正在一个Java程序,我需要调用一个bash脚本,需要一个string作为参数。 所以我写了代码: Process p = Runtime.getRuntime().exec("./script \"message send\""); 但是好像terminal不认为引号(“)是引号,并且把”message send“这个词作为两个参数:”message and send“,所以脚本没有被正确调用。 任何人有任何想法我可以做什么?

Java Runtime执行与命令行不同的内部程序吗?

我试图编译一些Java文件使用Runtime.getRuntime.exec(命令)和即时通讯生成命令。 下面的代码显示了我在做什么: String command = "javac "; for(String s: this.getPackages()) { command = command + "/home/benuni/CompileFiles/" + project + "/" + s + "/*.java "; } try { System.out.println("command: '"+ command +"'"); Process pro = Runtime.getRuntime().exec(command); printLines(" stderr:", pro.getErrorStream()); pro.waitFor(); 这是给出以下输出: command: 'javac /home/benuni/CompileFiles/HelloWorldProject/HelloWorldPackage/*.java ' stderr: javac: file not found: /home/benuni/CompileFiles/HelloWorldProject/HelloWorldPackage/*.java stderr: Usage: javac <options> […]

无法在Linux中从java调用mysqldump

这是代码: public static File backupDB() throws IOException { File file = null; file = new File("BKUP_DB_" + Calendar.getInstance()).replace("/", "-") + ".sql"); String executeCmd = "mysqldump -u " + "dbUserName" + " -p" + "dbPassword" + " " + "dbName" + " > " +file.getPath(); Process runtimeProcess; try { runtimeProcess = Runtime.getRuntime().exec(executeCmd); int processComplete = runtimeProcess.waitFor(); […]

Runtime.exec()不能运行“su – postgres -c'pg_dump …'”

这是我想运行的命令: su – postgres -c "pg_dump ….." 备份postgres数据库。 如果我现在在Linux shell,作为一个根,它的作品很好。 但是现在,我想从一个Java应用程序运行它,如下所示: String cmd = "su – postgres -c \"pg_dump –port 5432 …..\"" Process p = Runtime.getRuntime().exec(cmd); // read the error stream and input stream p.waitFor(); 它会抛出一个错误: su: unknown option "–port" please try "su –help" to get more information 现在我改变代码为: Process p = Runtime.getRuntime().exec(new String[0]{cmd}); // […]

在Runtime.exec()+ linux中不能使用&&运算符

我试图从下面粘贴的代码运行Java的可执行文件。 通过在terminal中使用&&操作符,我可以导航到一个命令并运行可执行文件。 我试图通过Runtime.getRuntime()。exec()命令传递相同的命令,但它似乎不喜欢&&运算符。 有没有人知道这个工作? 在下面的代码中,我只是传递“cd && pwd”作为testing用例; 一个更简单的命令,但它仍然无法正常工作。 谢谢 try{ int c; textArea.setText("Converting Source Code to XML"); //String[] commands = {"/bin/bash", "-c", "cd /home/Parallel/HomeMadeXML", "&&", "./src2srcml –position" + selectedFile.getName() + "-o targetFile.xml"}; String commands = "bash -c cd && pwd"; System.out.println(commands); Process src2XML = Runtime.getRuntime().exec(commands); InputStream in1 = src2XML.getErrorStream(); InputStream in2 = src2XML.getInputStream(); while ((c […]

为什么命令行实用程序通过Java程序调用时会挂起?

我需要你的build议和指导在下面的任务。 我正在使用libdmtx,它附带一个命令行实用程序,它读取ECC200 Data Matrix条形码的图像文件,读取它们的内容,并将解码的消息写入标准输出。 我想在我的linux平台上的java程序中使用这个命令行实用程序。 我使用的是Ubuntu的Linux。 我已经在我的linux机器上安装了libdmtx。 当我调用命令 dmtxread -n /home/admin/ab.tif 在linuxterminal上立即给出图像中条形码的解码值。 当我打算使用我的java程序调用这个命令时,代码执行命令,而dotn给出输出。 它看起来像程序正在处理或挂起。 以下是我的java代码,它调用以下命令 import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class Classtest { public static void getCodes(){ try { Process p; String command[]=new String[3]; command[0]="dmtxread"; command[1]="-n"; command[2]="/home/admin/ab.tif"; System.out.println("Command : "+command[0]+command[1]+command[2]); p=Runtime.getRuntime().exec(command); //I think hangs over here. BufferedReader reader=new BufferedReader(new InputStreamReader(p.getErrorStream())); String […]

来自相同stringinput的意外的不同结果

我有一个从外部接收input的BroadcastReceiver。 这个接收器必须像“鼠标般的”程序一样工作,并将input事件发送到系统。 我有根访问权限和权限。 我的问题是,当我发送一个string,如"input tap 275 410" ,程序行为正确,如果我甚至分裂string,如"input" + " tap" + " 275" + " 410" ,它仍然工作… 但是,当我组装string为所需: "input " + CursorSystem.command + " " + coords[0] + " " + coords[1] 然后没有任何事情发生……在debugging时,所有看过的string都是一样的(减去位置): value = {char[26]@830031306976} 0 = 'i' 105 1 = 'n' 110 2 = 'p' 112 3 = 'u' 117 4 = […]

Runtime.getRuntime()。exec()的奇怪行为

我有一些Java代码在Windows机器上执行某个命令。 然而,这种行为是奇怪的,因为同一个命令在一台机器上工作,但是在另外三台机器上却失败了。 据我所知,四台机器是相同的。 命令是这样的: cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=%APP_HOME%\logs\errors.log -arg3 some more parameters 其中%APP_HOME%是设置为值“D:/ path / to / program”的系统variables。 我得到的错误是这样的: 特定于应用程序的错误消息:无法打开某个日志或“相关文件”:d:/ path / to / program \ logs。 errno = 13,权限被拒绝 我使用的Java看起来像这样: Runtime.getRuntime().exec(cmdStr); 其中cmdStr是一个包含上述命令的string。 现在,我知道的是, 我真的应该使用重载的Runtime.exec(String [])方法 该命令使用正斜杠和反斜杠的组合 这些是有效的评论,我可能最终会解决这个问题,但是我正在努力解决的是为什么完全相同的代码在四台机器中只有三台出现故障。 是的,命令中提到的所有path都存在于该框中。 它变得更奇怪。 如果我执行以下(非常相似)的命令,它可以在所有四个框上正常工作。 cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=D:\path\to\program\logs\errors.log -arg3 some more parameters 在上面的工作版本中,唯一的区别是%APP_HOME%引用已被replace为-errorlogname参数的绝对path。 但是这个variables已经被放在了可执行文件的位置。 […]

在Windows中从Java程序运行命令提示符

我目前有我想从我的Java程序运行以下批处理脚本: “C:\ Program Files \ Java \ jdk1.6.0_25 \ bin \ java.exe”-classpath“D:…”Main>“… \ result.out” 现在,我做了一个简单的 Runtime.getRuntime().exec(command); 其中command是我在上面显示的string。 问题在于它只是简单地使用显示的参数调用java.exe ,而不是用给定的参数调用控制台。 差别是微妙的,因为如果直接调用java.exe ,它将忽略输出stream的redirect! 有一个简单的方法来做到这一点? 我已经尝试了“cmd”的前缀command ,但似乎没有帮助。 我想远离读取输出stream,然后不得不手动将其保存到文件。 谢谢