概述:

Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
 Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
 ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程,通过流的形式进行读取。

API:

destroy() 
   杀掉子进程。 
 exitValue() 
   返回子进程的出口值。 
 InputStream getErrorStream() 
   获得子进程的错误流。 
 InputStream getInputStream() 
   获得子进程的输入流。 
 OutputStream getOutputStream() 
   获得子进程的输出流。 
 waitFor() 
   导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止

注意:

1.destroy()杀掉子线程的状态在五分钟后进程才会消失

   2.执行linux命令,若命令包含一些特殊字符,需要封装ProcessBuilder 来获取Process对象

public class Command extends Thread {
private Log logger = LogFactory.getLog(Command.class);

/**
* 判断线程是否执行完毕
*/
public boolean isCompletion;

/**
* 本地线程对象
*/
public Process process;
/**
* 执行结果
*/
public String rs="";

private ShellExecReq req;

public Command(ShellExecReq req) {
this.req = req;
this.isCompletion = false;
}

/** 
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
ProcessBuilder p = new ProcessBuilder("/bin/bash", "-c", req.getCommand());
process = p.start();
InputStream in = process.getInputStream();
rs=IOUtils.getStringFromReader(new BufferedReader(new InputStreamReader(in,"GBK")));
rs=rs.replaceAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", "");
logger.info("执行脚本返回结果:"+rs);
in.close();
//程序执行完毕
isCompletion = true;
InputStream input = process.getErrorStream();
if (input != null) {
if (StringUtils.isBlank(rs)) {
rs = IOUtils.getStringFromReader(new BufferedReader(
new InputStreamReader(input)));
}
logger.error(IOUtils.getStringFromReader(new BufferedReader(new InputStreamReader(
input))));
}
} catch (IOException e) {
rs = ShellExecErrorMessage.execerror;
logger.error("执行脚本发生异常:" + e.getMessage(), e);
}
}

/**
* 中断运行线程
* @author Yang Xue 2014年10月31日
*/
public void kill() {
//终止服务器线程运行
this.process.destroy();
//中断线程
this.interrupt();
}
}

Process 执行shell 脚本相关推荐

  1. java执行shell脚本 process.waitFor()返回1

    记录一下今天遇到的一个问题 在java代码中执行shell脚本,部分代码如下 Process p = null; List<String> cmds = new ArrayList< ...

  2. java 调用casperjs_Java程序去调用并执行shell脚本及问题总结(推荐)

    摘要: 该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发. java开发的特点就是我们可以很早地进行TDDL, ME ...

  3. linux执行shell过程日志,Android之在linux终端执行shell脚本直接打印当前运行app的日志...

    1.问题 我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是 1).获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名 a ...

  4. android 应用层shell,如何让Android系统或Android应用执行shell脚本

    一.Android应用启动服务执行脚本 1如何写服务和脚本 在android源码根目录下有/device/tegatech/tegav2/init.rc文件相信大家对这个文件都不陌生(如果不明白就仔细 ...

  5. php中脚本代码开始,从PHP代码中执行shell脚本

    我想要做的就是使用PHP来执行youtube-dl -x --audio-format mp3 "token"并获得以下参数JSON:从PHP代码中执行shell脚本 状态(错误= ...

  6. python定时任务执行shell脚本切割Nginx日志-慎用

    Python定时任务执行shell脚本切割Nginx日志(慎用) 缘起 我们有一个Nginx服务用来接收埋点上报数据,输出的日志文件比较大,Nginx没有自带日志分割组件,这样输出的日志文件就比较大, ...

  7. Java程序定时执行shell脚本

    第一次写博客,写的不好还请见谅. 之前在Linux环境中想定期执行某个脚本,第一反应就是将这个task加入到crontab里(crontab的知识点这里就不具体介绍了),当然,这种做法一般情况下是可行 ...

  8. Linux中执行shell脚本的4种方法

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写 ...

  9. Linux下如何执行Shell脚本

    Linux下如何执行Shell脚本 Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等 ...

最新文章

  1. python学费多少-培训python学费多少?
  2. delphi打开word文件(刚刚学会的嘿嘿~)
  3. 使用jquery+css实现瀑布流布局
  4. 清华博导:我有个好学生想放弃科研 去中学当老师
  5. 用Python制作五子棋人机对弈(人工智障版和升级AI版)
  6. java520.1314表白_520表白套路对话大全 表白算式521.1314大全
  7. Java 实现打印文件详解(附demo)
  8. 数据治理之数据质量管控流程(参考)
  9. 用java模拟csma_CSMA/CD仿真的过程
  10. DHTML动态样式的作用
  11. html给标题设置背景,怎么在html中设置一级标题背景
  12. LeetCode 347. 前 K 个高频元素(C++)*
  13. mysql的聚簇索引和非聚簇索引
  14. 无法获取'https://jcenter.bintray.com/com/网站的资源
  15. 以软件测试的角度测试一支笔,如何测试一支笔.
  16. 蓝桥杯嵌入式史上最全最详细教程教你快速入门
  17. 2012计算机考研408,2012年考研计算机统考408真题
  18. php简单的静态页面现成,PHP生成静态页面的简单方法
  19. Tickeys - Liunx 给键盘配上音效的软件
  20. 在.net Core 使用PDF模板文件生成PDF文件,代替WEB打印控件!

热门文章

  1. 互联网优秀架构师必读书单V2.0
  2. 会议交流 | DataFunCon 线上大会 - 知识图谱专题论坛
  3. Python 文件操作中的读写模式:open(path, ‘-模式-‘,encoding=‘UTF-8‘)+python读写文件txt +文本数据预处理
  4. 军事武器知识图谱构建与自动问答项目QAonMilitaryKG
  5. Django - Form和ModelForm
  6. yum 多线程插件,apt多线程插件
  7. IO模型(epoll)--详解-01
  8. [UVa-437] Color Length
  9. KnockoutJS-与服务端交互
  10. H5 与 IOS的爱恨情仇(兼容问题)