Java如何得到当前进程ID号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何得到当前进程ID号相关的知识,希望对你有一定的参考价值。

我现在写一个后台服务,需要用命令行进行启动与停止。
在启动时,需要保存进程的ID号,在停止时需要用到此进程号的吧。
现在问题是如何得到进程号?
或者在停止时动态得到此程序正运行的进程的号码?
不需要得到当前线程的名字。

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

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

如果要结束程序,可以使用System.exit()
如果非要得到自己的Process ID,唯一的方法就是在shell取得Process ID,然后Java在通过某种方式取得相应的Process ID。
参考技术A Runtime.getruntime.exec()
会返回一个Process类型的对象,在java程序中只能用这个对象来监控。
可以创建一个新thread(假设叫W)来调用Process.waitFor()等待那个Runtime.exec产生的进程,然后判断W.isAlive()
参考技术B java是在jvm上跑的,jvm本身作为系统的一个进程在跑,所以平时见到的都是java多线程,没有进程间通信,为什么呢,就是因为java中没有进程这一说法,除非指的是程序本身这个进程。这个进程的话需要用到系统命令或者底层c语言才能够得到。呃,本人jni不是太熟悉,可以参考http://hi.baidu.com/lff0305/blog/item/4f301a7b20d3d3f20bd187e3.html,linux下直接调用ps-ef再用管道提取吧。本回答被提问者采纳

java在windows下如何实现获取进程ID

java在windows下如何实现获取进程ID??

参考技术A 给你个例子,通过调用windows的命令得到当前系统内的进程列表,然后你根据需要自己过滤出想要的进程ID(字符串分析).

try
Process p = Runtime.getRuntime().exec("cmd /c tasklist");
InputStream is = p.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buf = new byte[4096];
while(is.read(buf)>0)
//我在这里只是简单输出结果,你可以对结果进行你要的处理。
System.out.println(new String(buf));

bis.close();
is.close();
catch (IOException e)
e.printStackTrace();
答案补充 java是运行在其JVM中的,JVM是操作系统的一个进程,和操作系统中的其他进程是一样的.
对于你的补充提问,建议你使用java的jni来解决.java通过jni可以调用C来完成一些底层的事情.
参考技术B Process p = Runtime.getRuntime().exec("cmd /c tasklist");
InputStream is = p.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buf = new byte[4096];
while(is.read(buf)>0)
System.out.println(new String(buf));

bis.close();
is.close();

以上是关于Java如何得到当前进程ID号的主要内容,如果未能解决你的问题,请参考以下文章

java在windows下如何实现获取进程ID

如何获取子进程的输出

vs2019运行mpi如何改变进程数, 运行结果总是一个进程,进程号为0; 如何改变VS2019进程数? return 0;

如何在脚本中获取进程ID

在多线程情况下,如何获取当前线程id

Win7 下DELPHI如何通过进程名获取路径