在Linux下获取javaws jnlp applet的PID

我正在尝试从bash运行Java(jnlp)小程序,并获取创建的进程的PID.

使用此命令:

javaws myapplet.jnlp > /dev/null & echo $!

这将返回加载jnlp的java的第一个实例的pid.我猜,但与最终的Java进程运行无关.

有什么线索吗?

找出原始的javaws如下:

#!/bin/sh
prog="$0"
while [ -h "$prog" ]; do prog=$(readlink -f $prog); done
[ $# -eq 0 ] && set -- -viewer
exec $(dirname $prog)/javaws.real "$@"

有没有一种方法可以修改,以便提供子进程的PID?

解决方法:

创建一个agent .jar file并使用javaws的-J选项加载它. -J参数直接传递到目标VM,并与.jnlp文件中的vm args组合,因此您可以在与应用程序相同的过程中加载本地代理库.

例:

This agent library包含一个premain方法,该方法将当前PID(通过JNA访问)存储在文本文件中.

假设getpid.jar和jna.jar在当前目录中,则可以使用以下命令启动它:

javaws -J-javaagent:getpid.jar=pid.txt myapplet.jnlp

将其PID写入文件pid.txt后,将启动该applet.

上一篇:java-JNLP下载期间FileNotFoundException


下一篇:Jenkins slave-agent.jnlp 无法安装为服务(install as a service)