「java进程id」Java进程间通信
今天给各位分享java进程id的知识,其中也会对Java进程间通信进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java 获取指定的进程id
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.handlevbtabps.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)0str.endsWith(".exe")) {
ss = str.split("\\s");
for(int i=0;iss.length;i+=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
****************************
java在windows下如何实现获取进程ID
给你个例子,通过调用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来完成一些底层的事情.
JDK命令介绍
命令jps用于列出java进程,直接运行jps不加任何参数,可以列出Java程序的进程ID以及Main函数等名称。
参数-q指定jps只输出进程ID,而不输出类的短名称
参数-m用于输出传递给Java进程(主函数)的参数
参数 -l用于输出主函数的完整路径
参数 -v可以显示传递给JVM的参数
jstat是一个可以用于观察Java应用程序运行时信息的工具。它的功能非常强大,可以通过它,查看堆信息的详细使用情况。主要用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等,在没有GUI的服务器上,这款工具是首选的一款监控工具。
基本使用语法为:
选项option可以由以下值构成:
-class:显示ClassLoader的相关信息。
-compiler:显示JIT编译的相关信息。
-gc:显示与GC相关的堆信息。
-gccapacity:显示各个代的容量及使用情况。
-gccause:显示垃圾收集相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因。
-gcnew:显示新生代信息。
-gcnewcapacity:显示新生代大小与使用情况。
-gcold:显示老年代与永久代的信息。
-gcoldcapacity:显示老年代的大小。
-gcmetacapacity:显示元空间的大小。(在java8之前是使用-gcpermcapacity显示永久代的大小)
-gcutil:显示垃圾收集信息。
-printcompilation:输出JIT编译的方法信息。
以上选项可以输入 jstat -options 查看。
-t 参数可以在输出信息前加一个 Timestamp 列,显示程序的运行时间。
-h 参数可以在周期性数据输出时,输出多少行数据后,跟着输出一个表头信息。
vmid 参数就是Java进程id。
interval 参数用于指定输出统计数据的周期,单位为毫秒。
count 用于指定一共输出多少次数据。
jinfo 可以用来查看正在运行的Java运行程序的扩展参数,甚至支持在运行时修改部分参数。可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。
jmap 可以生成Java应用程序的堆快照和对象的统计信息。基本语法为:
option 选项如下:
-dump 生成java堆转储快照。格式为: -dump:[live,]format=b,file=,其中live子参数说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效
-heap 显示java堆详细信息,如使用哪种收集器、参数配置、分代情况等,在Linux/Solaris平台下有效
-histo 显示堆中对象统计信息,包含类、实例对象、合集容量
-permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效
-F 当虚拟机进程对-dump选项没有相应时。可使用这个选项强制生成dump快照。只在Linux/Solaris平台下有效
使用 jhat 工具可以用于分析Java应用程序的堆快照内容。jhat 在分析完成后,使用HTTP服务器展示其分析结果。在浏览器中访问
jstack 可用于导出Java应用程序的线程堆栈。语法为:
-l选项用于打印锁的附加信息。
jstack 工具会在控制台输出程序中所有的锁信息,可以使用重定向将输出保存到文件。
通过 jstack 工具不仅可以得到线程堆栈,它还能自动进行死锁检查,输出找到的死锁信息。
之前所述的工具中,只涉及到监控本机的Java应用程序。而在这些工具中,一些监控工具也支持对远程计算机的监控(如:jps、jstat)。为了启用远程监控,则需要配合使用jstatd工具。
命令jstatd是一个RMI服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。jstatd服务器将本机的Java应用程序信息传递到远程计算机。
JConsole(Java Monitoring and ManagementConsole)工具时JDK自带的图形化性能监控工具。通过JConsole工具,可以查看Java应用程序的运行概况,监控堆信息、永久区使用情况、类加载情况等。
批处理如何获取指定运行路径的java进程的进程ID?
wmic process get processid,executablepath|find "C:\windows\system32\notepad.exe"
把路径换成你的java进程的路径即可
如果需要赋值到变量,用for语句截取一下即可。
Java如何得到当前进程ID号
进程号也就是UNIX类OS中的,Process ID
可是Process ID的概念只有在UNIX类的操作系统中才有,Java作为一种多平台的程序语言,在JDK的接口中并不提供“进程ID”(Process ID)这种OS独有的概念。
如果要结束程序,可以使用System.exit()
如果非要得到自己的Process ID,唯一的方法就是在shell取得Process ID,然后Java在通过某种方式取得相应的Process ID。
关于java进程id和Java进程间通信的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。