如果启动了一个Java程序,它将进入系统进程 - 监视名称java.许多Java程序很难区分.因此,如果存在方式,设置名称将会很好,这将显示在进程监视器中.我知道这可能在不同的操作系统上有所不同.
一个简单的方法是,如果java解释器支持设置名称的开关,如下所示:
java -processname MyProgram -jar MyProgram
Run Code Online (Sandbox Code Playgroud)
但我找不到这样的开关,所以它可能不存在.Java中用于设置进程名称的API也可以.
那么,你有什么建议吗?
ome*_*dat 47
我不知道这是否可行,但您可以使用JDK附带的名为'jps'的命令行工具.它就像*nix ps,但只是Java程序.jps -v显示您传递给java的所有参数.
此外,我看到人们通过向-Dmyprocessnameargs 添加一个未使用的程序,将"进程名称"附加到他们的java进程中.
d.r*_*aev 20
正如@omerkudat所说:
jps -v
Run Code Online (Sandbox Code Playgroud)
打印出所有java进程{processID,params list}如果params列表不足以识别你需要的应用程序,请在运行它们时尝试添加一些虚拟参数:
java -Dname=myApp -cp myApp.jar some.client.main.MainFrame
Run Code Online (Sandbox Code Playgroud)
这将打印如下:
7780 MainFrame -Dname=myApp
Run Code Online (Sandbox Code Playgroud)
并且您可以使用进程ID来终止/监视它.
Dav*_*ips 11
您可以使用LD_PRELOAD垫片执行此操作:https://github.com/airlift/procname
prctl()当进程启动时,垫片只调用特定于Linux的:
static void __attribute__ ((constructor)) procname_init()
{
prctl(PR_SET_NAME, "myname");
}
Run Code Online (Sandbox Code Playgroud)
调用必须在主线程上进行,因此无法从Java或甚至使用JVMTI代理执行此操作,因为这些操作发生在不同的线程上.
当我第一次读到这篇文章时,更改进程名称的想法让我觉得不可能.但是,根据sun论坛上的这个古老的线程,你可以使用围绕JVM可执行文件的C++包装器来实现这一点.
坦率地说,我想知道你的真正问题是什么,因为我猜有更标准的解决方案然后尝试更改流程名称.
你最好的选择是类似于 launch4j http://launch4j.sourceforge.net/
有一个错误记录在 sun bugtracker 中,但这不是高优先级 http://bugs.sun.com/view_bug.do?bug_id=6299778
| 归档时间: |
|
| 查看次数: |
79082 次 |
| 最近记录: |