java 获取指定的进程id

java 获取指定的进程id,第1张

package test

import java.io.BufferedReader

import java.io.File

import java.io.FileWriter

import java.io.IOException

import java.io.InputStream

import java.io.InputStreamReader

import java.io.PrintWriter

public class GetPid {

private static final String PNAME = "QQ"烂绝侍

public static void main(String[] args)

throws IOException {

System.out.println("包含关键字 "+PNAME+" 的进程有:")

System.out.println()

String path = System.getProperty("user.dir")

final File createFileName = new File(path + "\\mytempscript.vbe")

if(createFileName.exists()?createFileName.delete():createFileName.createNewFile()){}

final PrintWriter pw = new PrintWriter(new FileWriter(createFileName,

true), true)

pw.println("for each ps in getobject(\"winmgmts:\\\\.\\root\\饥吵cimv2:win32_process\").instances_")

pw.println("wscript.echo ps.handle&vbtab&ps.name")

pw.println("next")

pw.close()

final InputStream ii = Runtime.getRuntime().exec(

"cscript " + path + "\宏缺\mytempscript.vbe").getInputStream()

final InputStreamReader ir = new InputStreamReader(ii)

final BufferedReader br = new BufferedReader(ir)

String str = null

String[] ss = null

while ((str = br.readLine()) != null) {

if (str.indexOf(PNAME)>0&&str.endsWith(".exe")) {

ss = str.split("\\s")

for(int i=0i<ss.lengthi+=2){

System.out.println("****************************")

System.out.println("进程名:"+ss[i+1]+"\n进程ID:"+ss[i])

}

}

}

System.out.println("****************************")

ir.close()

ii.close()

br.close()

}

}

运行结果如下

包含关键字 QQ 的进程有:

****************************

进程名:QQ.exe

进程ID:3956

****************************

进程号也就是UNIX类OS中的,Process ID

可是Process ID的概念只有在UNIX类的 *** 作系统中才有,Java作为一种多平台的程序语言,在JDK的接口中并不提供“进程ID”(Process ID)这种OS独有的概念。

如果要结束程序,可以使用System.exit()

如果非要得到自己的Process ID,唯一的方法就是在shell取历旦得Process ID,裂宴然后Java在通过某种方式肆烂银取得相应的Process ID。

代码:

package com.test

import java.lang.management.ManagementFactory

import java.lang.management.RuntimeMXBean

public class Target {

public static void main(String[] args) throws InterruptedException {System.out.println(getProcessID())

while(true) {

Thread.sleep(10000)

}

}

public static final int getProcessID() {

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean()

System.out.println(runtimeMXBean.getName())

return Integer.valueOf(runtimeMXBean.getName().split("@")[0]) .intValue()

}

}

运行结果:2896@PC-20150603VRPL2896

当前进程ID为2896。

ManagementFactory是一个如慧埋在运行时管理和监碧缺控Java VM的工厂类,它能提供很多管渣蚂理VM的静态接口,比如RuntimeMXBean;

RuntimeMXBean是Java虚拟机的运行时管理接口.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12497926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存