2

我正在尝试从 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?

4

2 回答 2

2

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


例子:

此代理库包含一个premain将当前 PID(通过JNA访问)存储在文本文件中的方法。

假设getpid.jar并且jna.jar在当前目录中,它可以通过以下方式启动:

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

这将在将其 PID 写入文件后启动小程序pid.txt

于 2010-08-25T11:38:48.930 回答
1

我不知道这是否能解决问题,但要找到一个 pid,更一般地说,我使用这个别名

alias prs='ps faux|grep -v grep|grep "$@"'

进而

prs my_prog
于 2010-08-16T12:04:34.610 回答