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();
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国倒数第五!毕马威全球自动驾驶报告|附下载

来源:智东西概要:指向高效、安全的自动驾驶被认为是未来汽车形态,渐渐融入到各国汽车发展战略中去,科技公司和传统车企纷纷入局。指向高效、安全的自动驾驶被认为是未来汽车形态,渐渐融入到各国汽车发展战略中去&#…

java 实现中文排序,Java自定义比较器实现中文排序

compareTo 方法compareTo()是两个字符串对象比较大小,返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。相等则返回0。compareTo()是两个字符串对象按ASCII比较大小(汉字是Unicode),返回一…

java调用shell脚本及注意事项

需求: get方法下载远程zip包,然后zip包解压,取出第一级目录再次进行压缩获取新的压缩zip包。 问题: 如果选择使用java代码的IO流操作,在不确定zip包大小的情况下可能会占用很大的内存,所以选择异步调用s…

潘建伟团队进行人类首次洲际量子通信,给奥地利发去了什么?

来源:澎湃新闻概要:世界首颗量子通信实验卫星完成目标;世界首条量子保密通信“京沪干线”开通;世界首次洲际量子通信……世界首颗量子通信实验卫星完成目标;世界首条量子保密通信“京沪干线”开通;世界首次…

java ps old gen perm gen,ElasticSearch 的一次非正常master脱离的调查

一共有4个节点的cluster,其中es4 是master,某个时间突然es1脱离了整个cluster,调查过程如下:[esbigdata1 logs]$ date; ssh bd4 date2012年09月03日 星期一09:41:26 CST2012年09月03日 星期一09:41:00 CSTes4比es1慢26秒&#xff…

《人工智能标准化白皮书(2018版)》发布|附下载

来源:光明网概要:1月18日下午,2018人工智能标准化论坛在京召开,本次论坛发布了《人工智能标准化白皮书(2018版)》。1月18日下午,2018人工智能标准化论坛在京召开,本次论坛发布了《人…

matlab7.0停止工作,matlab7.0闪退是怎么回事_matlab7.0闪退怎么办

描述兼容性引起的matlab7.0闪退1、在桌面的matlab图标上点击右键,选择“属性”2、选择“兼容性”3、勾选“以兼容模式运行这个程序”,再选择“Windows2000”4点击“确定”matlab7.0闪退的解决办法1)如果不是Intel的CPU,要添加环境变量--〉系统…

java调用shell脚本并传递参数

最近业务上需要java调用执行shell脚本进行一些业务处理,写了个demo,记录下。 主要代码 RequestMapping("/copy/database")ResponseBodypublic String copyDatabase(HttpServletRequest request,String dbCode,String targetPath){JSONObject …

贝叶斯机器学习前沿进展

来源:人机与认知实验室概要:随着大数据的快速发展,以概率统计为基础的机器学习在近年来受到工业界和学术界的极大关注,并在视觉、语音、自然语言、生物等领域获得很多重要的成功应用。摘要 随着大数据的快速发展,以概率…

matlab knn,MATLAB K近邻算法 — knnsearch() 函数 | 学步园

K近邻IDX knnsearch(X,Y) finds the nearest neighbor in X for each point inY. X is an MX-by-N matrix and Y is an MY-by-N matrix. Rows of X and Ycorrespond to observations and columns correspond to variables. IDX isa column vector with MY rows. Each row in I…

数据库事务的概念及其实现原理

目录 1. 认识事务 1.1 为什么需要数据库事务1.2 什么是数据库事务1.3 事务如何解决问题1.4 事务的ACID特性以及实现原理概述2.并发异常与并发控制技术 2.1 常见的并发异常2.2 事务的隔离级别2.3 事务隔离性的实现——常见的并发控制技术 2.3.1 基于封锁的并发控制2.3.2 基于时…

Fast.ai推出NLP最新迁移学习方法「微调语言模型」,可将误差减少超过20%!

原文来源:arxiv作者:Jeremy Howard、Sebastian Ruder「雷克世界」编译:嗯~是阿童木呀可以这样说,迁移学习已经促使计算机视觉领域发生了具有革命性的变化,但对于自然语言处理(NLP)中的现有方法来…

php去除txt重复,用vbscript实现从文本文件中删除所有重复行的代码

这篇文章主要为大家介绍了关于从文本文件中删除重复名字的类似问题,需要的朋友可以参考一下问:您好,脚本专家!如何从文本文件中删除所有重复行?-- SW答:您好,SW。您知道,成为一名脚本…

Spring Data JPA事务管理

1、事务基础概念_四大特性 数据库中事务的四大特性(ACID),如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性,是指事务包含的所有…

教育部发文:AI、算法等2018年进入全国高中课程!

来源:全球人工智能概要:1月16日上午,教育部召开新闻发布会,介绍了《普通高中课程方案和语文等学科课程标准(2017年版)》的有关情况,并重新修订了语文等14门学科的课程标准。1月16日上午&#xf…

经典php代码,HTML_php教程:经典PHP代码,经典循环例子 HTMLHEAD - phpStudy

经典循环例子经典循环例子for($counter 1; $counter < 6; $counter) //循环6次{print("counter is $counter\n"); //打印6次}?>for的高级运用for的高级运用/*** 打印必要的说明文字*/print("距离星期一还有几天&#xff1f;\n");print(&…

JPA事务示例分析

在这个工程中&#xff0c;定义一个名为User的实体&#xff1a; Entity Data NoArgsConstructor public class User {IdGeneratedValueprivate Long id;Size(max 5)private String name;Max(50)private Integer age;public User(String name, Integer age) {this.name name;t…

智能零售来了!Amazon Go无人商店周一正式对公众开放

来源&#xff1a;网络大数据概要&#xff1a;经过近 14 个月只对亚马逊公司员工开放的试运行&#xff0c;周一这家标着 Amazon Go 标志的店面将公开亮相&#xff0c;这是亚马逊近年来投入最多努力的项目之一&#xff0c;旨在重塑实体购物的体验。据《西雅图时报》报道&#xff…

python函数时间,python之时间函数

用time模块的strftime函数时间日期的格式化时间import timeprint(time.strftime(%y/%m/%d %H:%M:%S %A))格式化符号说明格式化符号说明格式化符号说明%Y年(2019)%B月(June)%A星期(Thursday)%y年(19)%b月(Jun)%a星期(Thu)%I时(02)%m月(06)%w星期(4)(0~6)(0是周日)%H时(14)%M分(2…

JPA - EntityTransaction与事务

EntityTransaction 接口用来管理资源层实体管理器的事务操作&#xff0c;通过调用实体管理器的getTransaction方法 获得其实例。 其常用方法如下&#xff1a; ① begin 用于启动一个事务&#xff0c;此后的多个数据库操作将作为整体被提交或撤消。 若这时事务已启动则会抛出…