一、概述
Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。
创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。
当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。
二、API预览
destroy()
杀掉子进程。
exitValue()
返回子进程的出口值。
InputStream getErrorStream()
获得子进程的错误流。
InputStream getInputStream()
获得子进程的输入流。
OutputStream getOutputStream()
获得子进程的输出流。
waitFor()
导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
三、如何创建Process对象,一般有一下两种方法:
1、每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。(ProcessBuilder这个是JDK5中新添加的final类,详细请参看“深入研究java.lang.ProcessBuilder类”一文。
2、Runtime.exec() 方法创建一个本机进程,并返回 Process 子类的一个实例。详细请参看“深入研究java.lang.Runtime类”一文。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestShellCommand {
public static void main(String args[]){
try
{
String commands = "sh /home/duck/a.sh 20120919";
Process process = Runtime.getRuntime().exec (commands);
// for showing the info on screen
InputStreamReader ir=new InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line);
}
}//end try
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
}
}
}
-------------------------a.sh
#!/bin/bash
echo "dddddddddddddddddd${1}eeeeeeeeeeeee"
echo "filename:${0}"
分享到:
相关推荐
java调用shell命令.pdf
我们选择后一种,即当完成外币资金的调度工作后,用Java的OutputStreamWriter来生成一个Txt文件,然后用Java来调用Shell脚本,在Shell脚本中完成FTP文件到Kondor系统的工作。
基于sshConnect的linux服务器的shell命令调用,并获取命令返回结果的实例。亲测有效!
java调用shell 包含简单的编写shell文件 调用含有参数的shell文件
主要介绍了Java调用Shell命令的方法,实例分析了java调用shell命令的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本
java调用shell命令,在shell命令中调用DataX任务并传递参数。 坑主要在DataX传递参数涉及到特殊字符应该如何处理这块,有时间可以自己试; 没时间可以用我的经验,自己选择;
今天小编就为大家分享一篇java调用shell命令并获取执行结果的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java连接linux,执行shell命令的工具类 sshxcute.jar
在linux环境中,这三个用户都可以直接在任意目录下执行该shell脚本,可是在java代码中调用shell脚本时,报了如下4个错误: 1、sqlldr: command not found 2、sqlplus: command not found 3、0750: You may need to ...
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
在Java程序中调用Unix/Linux主机上的Shell命令,并返回相应执行结果。
java 执行linux命令源码,java调用shell脚本源码,java web发布war到tomcat,servlet文件上传,ajax文件上传。 java web 上传war包、停止、启动、发布tomcat。 命令修改成自己的目录即可使用。
java调用linux系统命令的封装工具类。
主要介绍了Java代码执行shell命令的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
给大家介绍Android中执行java命令的方法及java代码执行并解析shell命令,需要的朋友一起学习
java远程登录Linux,并执行shell命令。
使用runtime, 实现java客户端多次调用linux命令或者shell脚本,并返回对应结果或信息
##AdbShellCommand在Android项目中执行adb Shell命令,通过java代码调用执行,本程序采用MVP架构。###Java中执行adb shell命令本项目中,adb shell命令执行的实现方法主要参考网文()。文章中,把执行代码集成在...
本shell脚本可以便捷的启动或停止java应用程序包含(spring-boot),且支持重启、停止、查看日志登命令。免去使用kill命令结束进程!