「java进程id」Java进程间通信

博主:adminadmin 2022-11-22 10:33:08 69

今天给各位分享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」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进程间通信的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。