1. 程式人生 > >基於centos的java編寫根據程序名稱關閉程序方法

基於centos的java編寫根據程序名稱關閉程序方法

基於centos的java編寫根據程序名稱關閉程序方法

package com.cwgis.closeprocess;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;

public class Main {

    public static void main(String[] args)
            throws Exception
    {
        String name = ManagementFactory.getRuntimeMXBean().getName();
        // get current_pid
        String current_pid = name.split("@")[0];
        System.out.println(name+ "  當前程序PID="+current_pid);

        //args=new String[1];
        //args[0]="dd";
	    // write your code here
        //System.out.println("helloworld");
        if(args==null) throw new IOException("args引數不能為空");
        if(args.length<0)throw new IOException("args引數至少為一個引數");
        String pName=args[0];
        System.out.println("當前正在查詢的程序名稱為:"+pName);
        boolean havePID = closeProcessBypName(pName,current_pid);
        if(havePID==false)
        {
            System.out.println(" PID未找到程序編號");
        }
    }
    public static boolean closeProcessBypName(String pName,String current_pid){
        boolean rbc=false;
        BufferedReader reader =null;
        try{
            String PID="";
            String t_pName="";
            //顯示所有程序
            Process process = Runtime.getRuntime().exec("jps");
            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = null;
            while((line = reader.readLine())!=null){
                String[] strs = line.split(" ");
                if(strs.length>=2) {
                    PID = strs[0];
                    t_pName=strs[1];
                }
                if(PID.equalsIgnoreCase(current_pid)==false && t_pName.equalsIgnoreCase(pName)){
                    rbc=true;
                    System.out.println("相關資訊 -----> "+line+" 找到PID="+PID+" ");
                    //
                    closeLinuxProcess(PID);  //kill -9  PID
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {

                }
            }
        }
        return rbc;
    }

    /**
     * 關閉Linux程序
     * @param Pid 程序的PID
     */
    public static void closeLinuxProcess(String Pid){
        Process process = null;
        BufferedReader reader =null;
        try{
            //殺掉程序
            process = Runtime.getRuntime().exec("kill -9 "+Pid);
            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = null;
            while((line = reader.readLine())!=null){
                System.out.println("殺掉程序PID="+line);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(process!=null){
                process.destroy();
            }

            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {

                }
            }
        }
    }
}

應用例子:

[[email protected] ~]# java -cp /usr/cwgis/tools/closeprocess.jar com.cwgis.closeprocess.Main Main
[email protected]  當前程序PID=6429
當前正在查詢的程序名稱為:Main
相關資訊 -----> 32417 Main 找到PID=32417 
相關資訊 -----> 31778 Main 找到PID=31778 
相關資訊 -----> 32326 Main 找到PID=32326 
相關資訊 -----> 32204 Main 找到PID=32204
runCmd.sh "java -cp /usr/cwgis/tools/closeprocess.jar com.cwgis.closeprocess.Main HRegionServer" all
runCmd.sh "java -cp /usr/cwgis/tools/closeprocess.jar com.cwgis.closeprocess.Main HMaster" all
[[email protected] ~]# runCmd.sh "java -cp /usr/cwgis/tools/closeprocess.jar com.cwgis.closeprocess.Main HRegionServer" all
*******************node111***************************
[email protected]  當前程序PID=7317
當前正在查詢的程序名稱為:HRegionServer
 PID未找到程序編號
*******************node112***************************
[email protected]
當前程序PID=32583 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node113*************************** [email protected] 當前程序PID=3806 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node114*************************** [email protected] 當前程序PID=1710 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node115*************************** [email protected] 當前程序PID=20986 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node116*************************** [email protected] 當前程序PID=17629 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node117*************************** [email protected] 當前程序PID=24213 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node118*************************** [email protected] 當前程序PID=23505 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node119*************************** [email protected] 當前程序PID=29860 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node120*************************** [email protected] 當前程序PID=27533 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node121*************************** [email protected] 當前程序PID=18447 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node122*************************** [email protected] 當前程序PID=5914 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號 *******************node123*************************** [email protected] 當前程序PID=29428 當前正在查詢的程序名稱為:HRegionServer PID未找到程序編號