Tag: 进程

如何将中断键序列发送到Java进程?

我有一个Java Process实例及其相关流的句柄。 这是一个控制台程序。 我想模拟一个中断序列。 在Windows上,这是Ctrl-C。 这可能没有当地人吗? 这样做的原因是:控制台程序本身就是一个命令行控制台,控制另一种语言的虚拟机。 用户可以从此控制台程序运行另一个程序。 程序运行时,中断序列将中断底层程序的执行并导致控制台程序进入调试模式。 我们用Java包装这个控制台调试器,以便它可以通过IDE(Eclipse)驱动。 发送中断序列将等同于在Eclipse调试器中按“suspend”。

线程启动的运行进程不会破坏(Java)

启动多个线程并使每个exec()然后destroy()一个正在运行的java进程导致某些进程没有被销毁并且在程序退出后仍然运行。 这是一些重现问题的代码。 我注意到你开始的线程越多,进程就越活跃。 而且,在destroy()之前睡眠越多,进程就越少。 (我使用InfiniteLoop作为示例。任何正在运行的进程都可以解决问题。) 编辑:已经向Oracle报告了Bug,等待答案。 随意分享有关该主题的任何知识/实验。 for(int i = 0; i < 100; i++) { new Thread(new Runnable() { public void run() { try { Process p = Runtime.getRuntime().exec(new String[]{"java", "InfiniteLoop"}); Thread.sleep(1); p.destroy(); }catch(IOException | InterruptedException e){e.printStackTrace();} } }).start(); }

如何区分任务管理器进程列表中的进程列表中的不同JavaWS应用程序?

我正在使用JavaWS来启动一个应用程序,然后如何在用户的机器中检查该应用程序是否正在运行,因为它在任务管理器进程列表中的名称不是我在JNLP文件中给出的。 注意。 我检查了任务管理器进程列表,但进程的名称是javaw.exe,所有使用JavaWS的应用程序都具有相同的名称。 我的问题是,如果用户启动了多个JavaWS应用程序,那么我们如何识别我们要检查的进程? 我想到了获得过程的PID,但遗憾的是没有任何方法可以获得过程的PID。 我在Windows上工作。

带有长参数的java runtime.getRuntime.exec(cmd)

我正在为命令行应用程序做一个前端。 它有一个很长的命令行是这样的: public String liveShellCommand(){ String cmd=”command mode –parameter arg –parameter2 arg2 –parameter3 arg3″; Runtime run = Runtime.getRuntime() ; Process pr ; try { log.progress(“sending command: ” +cmd); pr = run.exec( cmd ); pr.waitFor() ; 在我将“模式”开关添加到其中之前,一切似乎都有效。 “mode”开关从命令行执行。 我尝试了一些组合将参数拆分成一个不执行的数组。 我认为它与“模式”有关 – 没有 – 在它面前,它不能有 – 在它面前。 我究竟做错了什么? 编辑:我忘了提到我能看到的就是:调试器在无法编译的源代码上停止了。 我正在使用netbeans,它似乎没有打印出堆栈跟踪。 它在run.exec(cmd)上停止。 java有什么问题吗? 我能够使用ProcessBuilder来运行它,而不仅仅是失败… 它解析“命令”就好了,但当我添加“命令模式”时 java.io.IOException: Cannot run […]

如何一次性从运行时中删除所有进程?

例如: Runtime rt = Runtime.getRuntime(); 创建Runtime rt Process p1 = rt.exec(“C:/Windows/System32/calc.exe”); 在Runtime rt上创建Process p1 。 然后是p1.destroy(); 将破坏Process p1 。 我的问题是:如果我有多个Process (例如p1 , p2和p3 ),我如何一次性销毁它们,而不是逐个销毁它们?

Android:ffmpeg,文件名包含空格

我想从Android应用程序执行ffmpeg,非常如下所述: 将FFmpeg与Android-NDK配合使用 。 执行以下命令可以正常工作: Process p = Runtime.getRuntime().exec(“/data/data/yourpackagename/ffmpeg -i infile.mp4 outfile.mp4”); 要么 Process p = Runtime.getRuntime().exec(new String[]{“/data/data/yourpackagename/ffmpeg”, “-i”, “infile.mp4”, “outfile.mp4”); 但是当输入或输出文件名包含空格时,ffmpeg会因“找不到文件”错误而失败: Process p = Runtime.getRuntime().exec(“/data/data/yourpackagename/ffmpeg -i \”in space file.mp4\” outfile.mp4″); // fails Process p = Runtime.getRuntime().exec(“/data/data/yourpackagename/ffmpeg -i ‘in space file.mp4’ outfile.mp4”); // fails Process p = Runtime.getRuntime().exec(new String[]{“/data/data/yourpackagename/ffmpeg”, “-i”, “\”in space file.mp4\””, “outfile.mp4”); //fails 对于没有空格但引用的文件,FFMPEG也会失败: […]

使用流程构建器执行两个命令

我正在尝试编写一个程序,从命令提示符编译另一个java文件。 但是我遇到了问题。 此时,它正在成功执行编译Mocha.java的第一部分。 但是,我希望它也执行该文件并显示它输出的内容。 它什么也没显示。 有什么建议? pb = new ProcessBuilder(“javac”,”Mocha.java”); try { Process shell = pb.start(); OutputStream shellOut = shell.getOutputStream(); shellOut.write(“java Mocha”.getBytes()); shellOut.close(); InputStream shellIn = shell.getInputStream(); String response = IOUtils.toString(shellIn, “UTF-8”); System.out.println(response); shellIn.close(); shell.destroy(); } catch (IOException ex) { System.out.println(“failed”); } 注意: 我也尝试将所有参数初始化为: pb = new ProcessBuilder(“javac”,”Mocha.java”,”&&”,”java”,”Mocha”); 但这不仅不起作用,甚至没有像上面那样编译Mocha.java。 谢谢! 编辑: 所以我把它改成了两个进程。 现在很棒! 对任何感兴趣的人 pb […]

Java进程在进程中停止

我一直在尝试谷歌这一段时间,但没有任何成功。 我希望能在这里解决我的问题。 第一个function: public void startTFServer(Channel c) { try { ProcessBuilder procBuilder = new ProcessBuilder(“tfs.exe”); procBuilder.redirectErrorStream(); Process proc = null; System.out.println(Runtime.getRuntime().freeMemory()); proc = procBuilder.start(); System.out.println(Runtime.getRuntime().freeMemory()); StreamGobbler gobbler = new StreamGobbler(proc.getInputStream(), “STD_OUT”); gobbler.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 捕获进程输出的线程: private class StreamGobbler extends Thread { InputStream is; String […]

在java程序中执行bash命令

我已经有一段时间了,但我找不到解决方案。 我正在尝试在.jar文件中的Linux上执行bash命令。 为此,我尝试了很多东西,包括: Process p = new ProcessBuilder(“java”, “-jar”, “M1_MIAGE_PDL_VIZ_GROUPE3.jar”, “menu”).start(); Runtime.getRuntime().exec(“/bin/sh -c java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu”); Runtime.getRuntime().exec(new String[]{“/bin/sh -c”, “java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu”}); 所以,当我点击.jar文件时,我想程序打开一个bash,然后执行命令(java -jar …)来执行程序的另一部分。 关于如何做的任何想法?

如何获取生成的java进程的PID

我正在编写几个java程序,在完成我想做的任何事情后,需要在单独的JVM中终止/清理。 为此,我需要获取我正在创建的java进程的PID。