最近有一个需求,需要用一个java进程启动多个子进程来完成并发任务.由于必须给用户完成任务的反馈,所以需要父进程记录子进程的生命周期. exec方法返回一个Process对象,在当前进程内调用该对象的waitFor方法,然后父进程就会在该方法阻塞,那么只有在该Process结束的情况下,才会从waitFor中返回. 我写了两个类来测试: 一个是Father类: public class Father { private static int count = 0; private static i…
Process process = Runtime.getRuntime().exec("cmd /c dir c:"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process,getInputStream(),"GBK")); String line = bufferedReader.readLine(); 这样就不会乱码了…
在Java中,可以通过两种方式来创建进程,总共涉及到5个主要的类. 第一种方式是通过Runtime.exec()方法来创建一个进程,第二种方法是通过ProcessBuilder的start方法来创建进程.下面就来讲一讲这2种方式的区别和联系. 首先要讲的是Process类,Process类是一个抽象类,在它里面主要有几个抽象的方法,这个可以通过查看Process类的源代码得知: 位于java.lang.Process路径下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15…
举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用java调用控制台进程,即 Runtime.getRuntime().exec(),来运行这个python脚本.在windows下运行这个程序,假如是参考了一些百度来的被转载了无数遍的文章,很有可能运行结果是根本没有执行这个脚本.经过测试,在java中执行如下代码可以成功运行test.py文件: <pr…
在写批量运行bat工具的时候.想起了之前写的定时小工具里面的运行方法. 使用Runtime.getRuntime().exec方法. Runtime.getRuntime().exec("cmd /c start c:/test.bat") 这样就能够像dos窗体直接运行命令行一样. getRuntime返回Runtime的实例化对象,exec方法是返回Process对象. 查看Process类能够发现: The ProcessBuilder.start() and Runtime.e…
Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令. Runtime.getRuntime().exec共有六个重载方法: public Process exec(String command) 在单独的进程中执行指定的字符串命令. public Process exec(String [] cmdArray) 在单独的进程中执行指定命令和变量 public Process exec(String command, String [] envp) 在指定环境的…
用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现.下面是一种比较典型的程序模式: Process   process   =   Runtime.getRuntime().exec( ".//p.exe "); process.waitfor(   ); 在上面的程序中,第一行的“.//p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runt…
可执行文件路径如果包含空格,则在java中不能被获取到. 此时Debug一下,会发现 project=null. project.waitFor 的返回值为1.但是去源路径单击bat文件是可以正常运行的,说明问题出在文件路径上. 将文件路径中的空格用双引号引起来就可以了 原先的代码 String batpath = file.getCanonicalPath() + "\\resources\\runTest.bat"; //run bat file Process project =…
使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test2 { public static void main(String[] args) throws IOException, InterruptedException {…
linux登陆linux,就获得一个bash,之后你的bash就是一个独立的进程,被称为pid的就是,之后你在bash下面执行的任何命令都是由这个bash所衍生的,那些被执行的命令被称为子进程.子进程只会继承父进程的环境变量,子进程不会继承父进程的自定义变量.那么你原本bash中的自定义变量在进入子进程后就会消失不见,一直到你离开子进程并回到原本的父进程后,这个变量才会出现.除非把自定义变量设置为环境变量  export name…