微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何区分在Windows上运行的两个Java进程?

我有一些代码用命令行运行java.exe来启动游戏。 由于我不是玩家同时启动多个游戏程序实例,所以我需要检查游戏是否已经运行。

对于正常的exe文件,我可以从进程信息中获得exepath。 但是对于java游戏,执行文件path总是java.exe或javaw.exe的path。 所以我曾经想过获取命令行信息来运行jar文件。 但是我无法得到命令行的原因是:

请记住,从Win32的angular度来看,命令行只是一个复制到新进程地址空间的string。 启动过程和新过程如何解释这个string不是由规则而是由惯例来pipe理的。

所以,我需要另一种方式来做这样的事情,但我想不出任何方法来区分两个java进程。 任何人都可以给我一些提示

使用非MSVC编译器在Windows下使用带Unicode文件名的文件打开fstream

如何阅读Windows Phone 8.1中的Toast Notification属性

扩展厨师Windows Cookbook … disM限制

hadoop WARN util.NativeCodeLoader:无法为您的平台加载native-hadoop库…在适用的情况下使用builtin-java类

为什么不在Windows上的驱动器名称混淆

以编程方式更改显示器的温度

无法在Windows 7机器上使用OpenCV 2.4.3,Python 2.7打开“.mp4”video文件

如何从使用Windows的Ruby on Rails开始

你如何比较两个HWND指针?

无法访问类“CObject”中声明的私有成员?

您不必从启动程序运行java.exe 。 相反,您的启动器可以通过使用调用API来创建进程内JVM。 通过这种方式,您可以检查可执行文件的路径,检查命令行,创建已命名的互斥锁或执行任何您想要的操作,而不依赖于外部Java启动器。

另一种解决方案是使用Jvmstat性能计数器来查找系统中其他Java进程的主类,参数和VM选项,就像jps和jcmd权限一样。 这个想法是,每个Java进程(除非用-XX:+PerfdisableSharedMem运行)将某些运行时信息导出为用户的Temphsperfdata_user文件夹中的内存映射文件。 所以你可以检查这些文件,看看它们是否属于游戏。

我猜你可以传递JVM参数为“-Dservice.name”。 然后从启动文件(.bat或.sh文件),再次启动之前,您可以检查进程是否已经与service.name或已经运行。 并据此作出决定。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐