文档章节

windows上java进程工具类

J
 Java编程思想
发布于 2014/08/19 09:04
字数 348
阅读 72
收藏 1

检测进程是否运行,寻找进程id,关闭进程等

标签: <无>

代码片段(1)[全屏查看所有代码]

1. [代码]Process工具类


packagecn.showclear.main.utils;
 
importjava.io.IOException;
importjava.util.Scanner;
 
importorg.apache.log4j.Logger;
 
/**
 * 进程工具类,windows版
 *
 * @author LuLihong
 * @date 2014-8-13
 */
publicclassProcessUtils {
    privatestaticfinalLogger log = Logger.getLogger(ProcessUtils.class);
    /**
     * 检测某进程是否在运行
     * @param proName
     * @return
     */
    publicstaticbooleanisRunning(String proName) {
        try{
            Process process = Runtime.getRuntime().exec("tasklist");
            Scanner in =newScanner(process.getInputStream());
            while(in.hasNextLine()) {
                String p = in.nextLine();
                if(p.contains(proName)) {
                    returntrue;
                }
            }
            in.close();
        }catch(IOException e) {
            log.error(String.format("Check process[%s] running error: "+ e.getMessage(), proName));
        }
         
        returnfalse;
    }
     
    /**
     * 根据进程名寻找进程ID
     * @param proName
     * @return 不存在,返回-1
     */
    publicstaticintfindProcessId(String proName) {
        try{
            Process process = Runtime.getRuntime().exec("tasklist");
            Scanner in =newScanner(process.getInputStream());
            while(in.hasNextLine()) {
                String p = in.nextLine();
                if(p.contains(proName)) {
                    p = p.replaceAll("\\s+",",");
                    System.out.println(p);
                    String[] arr = p.split(",");
                    returnStringUtils.toInt(arr[1], -1);
                }
            }
            in.close();
        }catch(IOException e) {
            log.error(String.format("Find process[%s] id error: "+ e.getMessage(), proName));
        }
         
        return-1;
    }
     
    /**
     * 关闭某进程(根据PID)
     * @param pid
     * @return
     */
    publicstaticbooleankillProcess(intpid) {
        try{
            Runtime.getRuntime().exec("cmd.exe /c taskkill /f /pid "+ pid);
        }catch(IOException e) {
            log.error(String.format("Kill process[id=%d] error: "+ e.getMessage(), pid));
            returnfalse;
        }
         
        returntrue;
    }
     
    /**
     * 关闭进程(根据名称)
     * @param proName
     * @return
     */
    publicstaticbooleankillProcess(String proName) {
        intpid = findProcessId(proName);
        if(pid == -1)returntrue;
        returnkillProcess(pid);
    }
     
     
    /**
     * 关闭某进程(根据名称)直到真正关闭
     * @param proName
     * @return
     */
    publicstaticbooleankillProcessBlock(String proName) {
        intpid = findProcessId(proName);
        if(pid == -1)returntrue;
        do{
            killProcess(pid);
            try{
                Thread.sleep(100);
            }catch(InterruptedException e) {
            }
        }while(isRunning(proName));
         
        returntrue;
    }
     
    /**
     *  显示所有进程
     */
    publicstaticvoidlistProcess() {
        try{
            Process process = Runtime.getRuntime().exec("tasklist");
         
            Scanner in =newScanner(process.getInputStream());
            while(in.hasNextLine()) {
                System.out.println(in.nextLine());
            }
            in.close();
        }catch(IOException e) {
        }
    }
     
    publicstaticvoidmain(String[] args) {
        longt1 = System.currentTimeMillis();
        listProcess();
        longt2 = System.currentTimeMillis();
        System.out.println("Used time: "+ (t2 - t1));
         
         
        String proName ="Foxmail.exe";
//      int pid = findProcessId(proName);
//      System.out.println(pid);
//      killProcess(pid);
          
         booleanb = killProcessBlock(proName);
         longt3 = System.currentTimeMillis();
         System.out.println("Used time: "+ (t3 - t2));
         System.out.println(b);
    }
     
}


本文转载自:http://www.oschina.net/code/snippet_1156356_38089

J
粉丝 27
博文 164
码字总数 9502
作品 0
广州
程序员
私信 提问
线上服务 CPU 100%?一键定位 so easy!

0、背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一通手...

大数据之路
2017/08/28
0
2
-1-0 Java 简介 java是什么 java简单介绍

Java是一门纯粹的面向对象的高级的平台无关的编程语言 官网介绍: 了解 Java 技术 https://www.java.com/zh_CN/about/ 推荐词条: https://zh.wikipedia.org/wiki/Java https://zh.wikipedia.o...

noteless
2018/07/03
0
0
《深入理解Java虚拟机》——JDK自带命令行工具

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储...

戴的天
2014/08/19
0
1
JDK 1.7 基本概念和目录结构

参考资料: http://blog.csdn.net/kindazrael/article/details/7270673 http://docs.oracle.com/javase/7/docs/index.html JDK and JRE File Structure http://docs.oracle.com/javase/7/doc......

jack688
2018/06/26
0
0
Linux ---> 监控JVM工具

JDK内置工具使用 jps(Java Virtual Machine Process Status Tool) 查看所有的jvm进程,包括进程ID,进程启动的路径等等。 jstack(Java Stack Trace) ① 观察jvm中当前所有线程的运行情况和线...

shking
2013/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redox OS 发布 0.5 版

Redox OS 是一个几乎完全以 Rust 语言编写的通用操作系统及周围生态(例如文件系统、显示服务器及 Rust 版本的 libc)。其遵循微内核架构,在一定程度上兼容于 POSIX。 该项目于日前发布了 ...

linuxCool
今天
2
0
更新上传git/gitee项目时出现密码配置错误(incorrect username or password)的解决办法

1.输入【git remote add origin git地址】 命令时出现incorrect username or password的错误,这是因为之前弹出输入账户和密码时输错了,而且会一直默认错误的账户和密码,因此需要把之前输入...

west_coast
今天
0
0
Jenkins基础入门-1-Jenkins简单介绍和环境安装

如果在做自动化测试的朋友,应该熟悉Jenkins,或者至少使用过。如果一个人没有使用过Jenkins或者hudson,hudson是Jenkins的前身,他还说自己做过自动化测试,只能说,他只不过是在做半自动化...

shzwork
今天
1
0
linux上解压版安装jdk,tomcat

需要的安装包 1.vmware12 2.centos7版本 3.安装完成后需要xshell来连接远程虚拟机,虚拟机保证要联网,网络畅通。 4.xftp用来向linux传输文件用,一般来说xshell和xftp配套使用 5.对应的压缩...

architect刘源源
今天
29
0
使用 spring 的 IOC 解决程序耦合

工厂模式解耦 在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时...

骚年锦时
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部