Linux环境下Java对进程的操作

3 篇文章 0 订阅
3 篇文章 0 订阅

Linux环境下Java对进程的操作

本次主要讨论linux底下java对进程是否存在进行判断,以及java如何执行Linux脚本和命令

java执行Linux脚本和命令

java要执行Linux脚本首先得获取java的运行环境runtime

/** 
 * 执行linux命令 
 * @auther liduote 
 * 2017-2-21 下午04:41:28 
 * @param runtime 
 * @throws IOException 
 */  
public static void execCMD(Runtime runtime)  
                                throws IOException {  
    runtime.exec("ls -al");  
} 
java判断某进程是否存在

tips:ps 命令使用方法
ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名称>][-g <群组名称>]
[-G <群组识别码>][-p <进程识别码>][p <进程识别码>][-s <阶段作业>]
[-t <终端机编号>][t <终端机编号>][-u <用户识别码>][-U <用户识别码>]
[U <用户名称>][-<进程识别码>][–cols <每列字符数>]
[–columns <每列字符数>][–cumulative][–deselect][–forest]
[–headers][–help][– info][–lines <显示列数>][–no-headers]
[–group <群组名称>][-Group <群组识别码>][–pid <进程识别码>]
[–rows <显示列数>][–sid <阶段作业>][–tty <终端机编号>]
[–user <用户名称>][–User <用户识别码>][–version]
[–width <每列字符数>]

#假如查询mysql
$ ps -C mysqld -f --columns=200
-------------------------------
UID        PID  PPID  C STIME TTY          TIME CMD
polkitd  24995 11152  0 Jan12 ?        00:21:22 mysqld --init-file=/tmp/mysql-first-time.sql

所以我们通过java代码的写法是

public boolean isExistProcess() throws IOException {  
    String command = "ps -C mysqld -f --cols=200";
    String program = "mysqld --init-file=/tmp/mysql-first-time.sql";
    boolean isExistProcess = false;
    Process process = Runtime.getRuntime().exec(command);  
    InputStream in = process.getInputStream();  
    InputStreamReader is = new InputStreamReader(in);  
    BufferedReader read = new BufferedReader(is);    
    String line = "";    
    while((line = read.readLine()) != null) {  
        if(line.indexOf(program) >= 0) {  
            isExistProcess = true;  
            break;  
        }  
    }  
    //关闭流  
    in.close();  
    is.close();  
    read.close();  
    process.destroy();  

    return isExistProcess;  
}
综合起来使用可以对apache(tomcat)进行重启
//软件安装目录  
public static final String CATALINA_HOME = "/data/app/tomcat";    
//重试次数  
public static final int RETRY_TIME = 10;  

/** 
 * 重启Tomcat 
 * @auther liduote 
 * 2017-2-21 下午05:27:24 
 * @param runtime 
 * @return 
 * @throws IOException 
 */  
public static boolean restartTomcat(Runtime runtime) throws IOException{  
    //结束tomcat进程  
    for (int i = 0; i < RETRY_TIME; i++) {  
        if(isExistTomcatProcess(runtime)) {  
            //调用tomcat自身脚本结束进程  
            shutdownTomcat(runtime);  
            try {  
                Thread.currentThread().sleep(5000);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
            if(isExistTomcatProcess(runtime)) {   
                //强制结束进程  
                killTomcatBySoft(runtime);  
                try {  
                    Thread.currentThread().sleep(5000);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        }else {  
            break;  
        }  
    }         
    //启动tomcat  
    for (int i = 0; i < RETRY_TIME; i++) {  
        if(!isExistTomcatProcess(runtime)) {  
            //调用tomcat自身脚本重启程序  
            startupTomcat(runtime);  
            try {  
                Thread.currentThread().sleep(5000);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }else {  
            break;  
        }  
    }  

    if(isExistTomcatProcess(runtime)) {  
        return true;  
    }else {  
        return false;  
    }  

}  

/** 
 * 判断是否含有tomcat进程 
 * @auther liduote 
 * 2017-2-21 下午04:41:04 
 * @param runtime 
 * @return 
 * @throws IOException 
 */  
public static boolean isExistTomcatProcess(Runtime runtime) throws IOException {  
    String program = "org.apache.catalina.startup.Bootstrap start";  
    String command = "ps -C java -f --cols=1000";  
    return isExistProcess(runtime, command, program);  
}  

/** 
 * 判断是否含有apache进程 
 * @auther liduote 
 * 2017-2-21 下午04:41:04 
 * @param runtime 
 * @return 
 * @throws IOException 
 */  
public static boolean isExistApacheProcess(Runtime runtime) throws IOException {  
    String program = "/usr/sbin/httpd";  
    String command = "ps -C httpd -f --cols=1000";  
    return isExistProcess(runtime, command, program);  
}  

/** 
 * 判断当前进程中是否含有program 
 * @auther liduote 
 * 2017-2-21 下午05:41:04 
 * @param runtime 
 * @param command 
 * @param program 
 * @return 
 * @throws IOException 
 */  
public static boolean isExistProcess(Runtime runtime, String command, String program) throws IOException {  
    boolean isExistTomcatProcess = false;  

    Process process = runtime.exec(command);  
    InputStream in = process.getInputStream();  
    InputStreamReader is = new InputStreamReader(in);  
    BufferedReader read = new BufferedReader(is);    
    String line = "";    
    while((line = read.readLine()) != null) {  
        if(line.indexOf(program) >= 0) {  
            isExistTomcatProcess = true;  
            break;  
        }  
    }  
    //---------------------  
    in.close();  
    is.close();  
    read.close();  
    process.destroy();  
    //---------------------  

    return isExistTomcatProcess;  
}  

/** 
 * 关闭Tomcat 
 * @auther liduote 
 * 2017-2-21 下午04:41:04 
 * @param runtime 
 * @throws IOException 
 */  
public static void shutdownTomcat(Runtime runtime) throws IOException {  
    runtime.exec(CATALINA_HOME + "bin/shutdown.sh");  
}  

/** 
 * 启动Tomcat 
 * @auther liduote 
 * 2017-2-21 下午04:41:04 
 * @param runtime 
 * @throws IOException 
 */  
public static void startupTomcat(Runtime runtime) throws IOException {  
    runtime.exec(CATALINA_HOME + "bin/startup.sh");  
}  

/** 
 * 重启Apache 
 * @auther liduote 
 * 2017-2-21 下午04:41:04 
 * @param runtime 
 * @return 
 * @throws IOException 
 */  
public static boolean restartApache(Runtime runtime) throws IOException {  
    if(isExistApacheProcess(runtime)) {  
        runtime.exec("/usr/sbin/httpd -k restart");  
    }else {  
        runtime.exec("/usr/sbin/httpd start");  
    }  

    if (isExistApacheProcess(runtime)){  
        return true;  
    }else{  
        return false;             
    }  
}  

/** 
 * 强制结束Tomcat进程 
 * @auther liduote 
 * 2017-2-21 下午04:41:04  
 * @param runtime 
 * @throws IOException 
 */  
public static void killTomcatBySoft(Runtime runtime) throws IOException {  
    String[] cmd = {"sh", "-c", "ps aux | grep tomcat"};  
    Process process = runtime.exec(cmd);  
    InputStream in = process.getInputStream();  
    InputStreamReader is = new InputStreamReader(in);  
    BufferedReader read = new BufferedReader(is);  
    String line = null;    
    while((line = read.readLine()) != null) {  
        if(line.indexOf("org.apache.catalina.startup.Bootstrap start") >= 0) {  
            String tomcatPid = line.split("\\s+")[1];  
            runtime.exec("kill -9 "+tomcatPid);  
        }  
    }  
    in.close();  
    is.close();  
    read.close();  
    process.destroy();  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值