本文由黑壳网发布
本文来源 Java 执行终端命令 - 黑壳网 http://blog.bhusk.com/articles/2018/01/10/1515580637699.html
壳叔搞笑一刻
餐厅里原来的收银员叫我大哥,她家的亲戚朋友经常来餐厅消费,和她同辈的也随她叫我大哥,哪天有一桌客人喝完酒,结账时耍酒疯,这时候,收银员的弟弟带着十几个汉子来餐厅就餐,一个个轮番喊大哥,直接把耍酒疯的吓的赶紧结账走人,不让打狠折了!
正文
项目需要有些安全机制,如果被触发到,就需要 shutdown 把服务器给关掉。所以想了一个比较简单的办法,让 Java 执行终端命令就可以了。
百度科普了一下, java.lang.Process
官方类说明 https://docs.oracle.com/javase/8/docs/api/java/lang/Process.html
介绍
以下这段内容来自官方翻译
该ProcessBuilder.start()
和 Runtime.exec
方法创建一个本机进程,并返回的子类的实例 Process
可以用来控制过程,并获得相关信息。该类 Process
提供了从进程执行输入,执行输出到进程,等待进程完成,检查进程的退出状态以及销毁(终止)进程的方法。
创建进程的方法可能不适用于某些本机平台上的特殊进程,例如本机窗口进程,守护进程,Microsoft Windows 上的 Win16 / DOS 进程或 shell 脚本。
默认情况下,创建的子流程没有自己的终端或控制台。其所有的标准 I / O(即标准输入,标准输出,标准错误)操作将被重定向到父进程,在那里他们可以经由使用所述方法获得的流进行访问 getOutputStream()
, getInputStream()
和getErrorStream()
。父进程使用这些流将输入提供给子进程并从子进程获取输出。由于某些本地平台仅为标准输入和输出流提供有限的缓冲区大小,因此如果不及时写入输入流或读取子流程的输出流,可能会导致子流程阻塞甚至死锁。
如果需要, 子流程 I / O 也可以 使用ProcessBuilder
类的方法重定向。
当没有更多的 Process
对象引用时,子进程不会被终止,而是子进程继续异步执行。
不要求 Process
对象所代表的进程异步地或同时地对拥有该 Process
对象的 Java 进程执行。
从 1.5 开始,ProcessBuilder.start()
是创建一个的首选方法 Process
。
方法摘要
以下表格是根据官方文档进行翻译的
- | :-: |
修饰符和类型 | 方法和描述
abstract void
|destroy
杀死子进程。
Process
| 杀死子进程。
abstract int
|[exitValue]
返回子流程的退出值。
abstract InputStream
|[getErrorStream]
返回连接到子进程的错误输出的输入流。
abstract InputStream
|[getInputStream]
返回连接到子进程正常输出的输入流。
abstract [OutputStream
|[getOutputStream]
返回连接到子进程正常输入的输出流。
boolean
|[isAlive]
测试由此表示的子进程是否Process
还活着。
abstract int
|waitFor
导致当前线程等待(如有必要),直到此Process
对象表示的进程已终止。
boolean
| 导致当前线程等待(如有必要),直到此Process
对象表示的子进程已终止,或经过指定的等待时间。
过多的详细,可以参考 Process官方提供的说明,非常的详细。
我写了一个非常通用的代码示例,可供参考
代码示例
/**
* 在控制台输入命令 *
* @param command 代表要执行的命令
*/
public static void writeCommand(String command) {
Process pro = null;
try {
pro = Runtime.getRuntime().exec(command);
/**
* 虽然cmd命令可以直接输出,但是通过IO流技术可以保证对数据进行一个缓冲。
*/
BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
//logger.error("IOException",e);
}
}
关于我们
程序员太辛苦了
请善待你们身边的每一位程序员~
欢迎在评论写下你的程序员自黑体呦,嗯,相信你可以滴~~~~~~
以上内容,均来自互联网~
欢迎扫描二维码加入我们的组织
黑壳网交流群 Qq:200408242
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于