java执行linux命令

Wesley13
• 阅读 675

java执行linux命令

最近工作中需要在Java中执行Linux命令,对遇到的坑做一个小结。

API

java执行linux命令

把要执行的命令作为exec方法的参数,返回一个Process对象代表命令执行的进程。由于执行完命令通常要获取输出显示出来,因此对执行命令并获取输出的过程封装为一个工具类:

CommandUtil

package org.ml.deployer.util;



 



import java.io.IOException;



import java.io.InputStream;



import java.util.Scanner;



import java.util.concurrent.TimeUnit;



 



public class CommandUtil {



    public static String run(String command) throws IOException {



        Scanner input = null;



        String result = "";



        Process process = null;



        try {



            process = Runtime.getRuntime().exec(command);



            try {



                //等待命令执行完成



                process.waitFor(10, TimeUnit.SECONDS);



            } catch (InterruptedException e) {



                e.printStackTrace();



            }



            InputStream is = process.getInputStream();



            input = new Scanner(is);



            while (input.hasNextLine()) {



                result += input.nextLine() + "\n";



            }



            result = command + "\n" + result; //加上命令本身,打印出来



        } finally {



            if (input != null) {



                input.close();



            }



            if (process != null) {



                process.destroy();



            }



        }



        return result;



    }



    



    public static String run(String[] command) throws IOException {



        Scanner input = null;



        String result = "";



        Process process = null;



        try {



            process = Runtime.getRuntime().exec(command);



            try {



                //等待命令执行完成



                process.waitFor(10, TimeUnit.SECONDS);



            } catch (InterruptedException e) {



                e.printStackTrace();



            }



            InputStream is = process.getInputStream();



            input = new Scanner(is);



            while (input.hasNextLine()) {



                result += input.nextLine() + "\n";



            }



            result = command + "\n" + result; //加上命令本身,打印出来



        } finally {



            if (input != null) {



                input.close();



            }



            if (process != null) {



                process.destroy();



            }



        }



        return result;



    }



}

示例:

执行启动tomcat的脚本:

java执行linux命令

执行结果:

java执行linux命令

执行带特殊字符的命令

exec方法无法执行带 | > 等特殊字符的命令,如 ps -ef | grep java 。

此时要把整个命令作为 /bin/sh 的参数执行,如:

java执行linux命令

注意

exec方法通过创建一个子进程执行Linux命令,因此频繁地通过Java调用Linux命令对性能影响非常大,不要在程序中过度使用这种方式。

java执行linux命令 以上就是良许教程网为各位朋友分享的Linux相关知识。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
!(https://oscimg.oschina.net/oscnet/3e08a942dd884e9ab82b63a1f3c4aada.jpg"未命名文件.jpg")Java技术栈不可错过的Java 技术公众号!(https://oscimg.oschina.net/oscnet/00fcff52518e
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Spring Boot 2.1.6 发布了!
!(https://oscimg.oschina.net/oscnet/e5aaab7a5b9f4aa7a944b00aff253ed2.jpg)Java技术栈www.javastack.cn优秀的Java技术公众号(https://www.oschina.net/action/GoToLink?urlhttps%3
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这