操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程 。
父进程使用这些流来提供到子进程的输入和获得从子进程的输出 。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大?。?
如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁 。
当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程 。
对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程 。
特别需要注意的是:
1,创建的子进程没有自己的终端控制台,所有标注操作都会通过三个流
(getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程(父进程可通过这些流判断子进程的执行情况)
2,因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,
则可能导致子进程阻塞,甚至产生死锁
[plain] view plain copy
abstractvoid destroy()
杀掉子进程 。
abstractint exitValue()
返回子进程的出口值 。根据惯例,值0表示正常终止 。
abstractInputStream getErrorStream()
获取子进程的错误流 。
abstractInputStream getInputStream()
获取子进程的输入流 。
abstractOutputStream getOutputStream()
获取子进程的输出流 。
abstractint waitFor()
导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止 。
如果已终止该子进程,此方法立即返回 。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程 。
特别需要注意:如果子进程中的输入流,输出流或错误流中的内容比较多 , 最好使用缓存(注意上面的情况2)
再来看一下Runtime类:
[plain] view plain copy
每个Java应用程序都有一个Runtime类实例 , 使应用程序能够与其运行的环境相连接 。可以通过getRuntime方法获取当前运行时环境 。
应用程序不能创建自己的Runtime类实例 。
介绍几个主要方法:
[plain] view plain copy
Process exec(String command)
在单独的进程中执行指定的字符串命令 。
Process exec(String command, String[] envp)
在指定环境的单独进程中执行指定的字符串命令 。
Process exec(String command, String[] envp, File dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令 。
Process exec(String[] cmdarray)
在单独的进程中执行指定命令和变量 。
Process exec(String[] cmdarray, String[] envp)
在指定环境的独立进程中执行指定命令和变量 。
Process exec(String[] cmdarray, String[] envp, File dir)
在指定环境和工作目录的独立进程中执行指定的命令和变量 。
command:一条指定的系统命令 。
envp:环境变量字符串数组,其中每个环境变量的设置格式为name=valuejava获取前端代码;如果子进程应该继承当前进程的环境,则该参数为null 。
dir:子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为null 。
cmdarray:包含所调用命令及其参数的数组 。
以下为示例(要打成可执行jar包扔到linux下执行):
[java] view plain copy
public class test {
public static void main(String[] args){
InputStream in = null;
try {
Process pro = Runtime.getRuntime().exec(new String[]{"sh",
"/home/test/test.sh","select admin from M_ADMIN",
"/home/test/result.txt"});
pro.waitFor();
in = pro.getInputStream();
推荐阅读
- 微信视频号改成直播,微信视频号直播怎么变现
- sap版本能升级吗,sap版本介绍
- 本科毕业设计怎么做与潮流计算,本科毕业设计要做到什么程度
- 飞行僵尸游戏,飞行僵尸游戏怎么玩
- 微信红包java接入代码 java微信红包实现
- cba山东什么时间直播,cba20212022山东队赛程表
- 什么防御西瓜视频教程,防御的东西有什么
- 新媒体管家如何采集135,新媒体管家怎么了
- 怎么停止mysql重启 停止mysql命令