Process 执行shell 脚本
概述:
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 脚本相关推荐
- java执行shell脚本 process.waitFor()返回1
记录一下今天遇到的一个问题 在java代码中执行shell脚本,部分代码如下 Process p = null; List<String> cmds = new ArrayList< ...
- java 调用casperjs_Java程序去调用并执行shell脚本及问题总结(推荐)
摘要: 该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发. java开发的特点就是我们可以很早地进行TDDL, ME ...
- linux执行shell过程日志,Android之在linux终端执行shell脚本直接打印当前运行app的日志...
1.问题 我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是 1).获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名 a ...
- android 应用层shell,如何让Android系统或Android应用执行shell脚本
一.Android应用启动服务执行脚本 1如何写服务和脚本 在android源码根目录下有/device/tegatech/tegav2/init.rc文件相信大家对这个文件都不陌生(如果不明白就仔细 ...
- php中脚本代码开始,从PHP代码中执行shell脚本
我想要做的就是使用PHP来执行youtube-dl -x --audio-format mp3 "token"并获得以下参数JSON:从PHP代码中执行shell脚本 状态(错误= ...
- python定时任务执行shell脚本切割Nginx日志-慎用
Python定时任务执行shell脚本切割Nginx日志(慎用) 缘起 我们有一个Nginx服务用来接收埋点上报数据,输出的日志文件比较大,Nginx没有自带日志分割组件,这样输出的日志文件就比较大, ...
- Java程序定时执行shell脚本
第一次写博客,写的不好还请见谅. 之前在Linux环境中想定期执行某个脚本,第一反应就是将这个task加入到crontab里(crontab的知识点这里就不具体介绍了),当然,这种做法一般情况下是可行 ...
- Linux中执行shell脚本的4种方法
这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写 ...
- Linux下如何执行Shell脚本
Linux下如何执行Shell脚本 Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等 ...
最新文章
- python学费多少-培训python学费多少?
- delphi打开word文件(刚刚学会的嘿嘿~)
- 使用jquery+css实现瀑布流布局
- 清华博导:我有个好学生想放弃科研 去中学当老师
- 用Python制作五子棋人机对弈(人工智障版和升级AI版)
- java520.1314表白_520表白套路对话大全 表白算式521.1314大全
- Java 实现打印文件详解(附demo)
- 数据治理之数据质量管控流程(参考)
- 用java模拟csma_CSMA/CD仿真的过程
- DHTML动态样式的作用
- html给标题设置背景,怎么在html中设置一级标题背景
- LeetCode 347. 前 K 个高频元素(C++)*
- mysql的聚簇索引和非聚簇索引
- 无法获取'https://jcenter.bintray.com/com/网站的资源
- 以软件测试的角度测试一支笔,如何测试一支笔.
- 蓝桥杯嵌入式史上最全最详细教程教你快速入门
- 2012计算机考研408,2012年考研计算机统考408真题
- php简单的静态页面现成,PHP生成静态页面的简单方法
- Tickeys - Liunx 给键盘配上音效的软件
- 在.net Core 使用PDF模板文件生成PDF文件,代替WEB打印控件!
热门文章
- 互联网优秀架构师必读书单V2.0
- 会议交流 | DataFunCon 线上大会 - 知识图谱专题论坛
- Python 文件操作中的读写模式:open(path, ‘-模式-‘,encoding=‘UTF-8‘)+python读写文件txt +文本数据预处理
- 军事武器知识图谱构建与自动问答项目QAonMilitaryKG
- Django - Form和ModelForm
- yum 多线程插件,apt多线程插件
- IO模型(epoll)--详解-01
- [UVa-437] Color Length
- KnockoutJS-与服务端交互
- H5 与 IOS的爱恨情仇(兼容问题)