我正在尝试从bash运行java(jnlp)applet并获取已创建进程的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?
答案 0 :(得分:3)
创建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。
答案 1 :(得分:1)
我不知道这是否可以解决问题,但是为了找到一个pid,更一般地说,我使用这个别名
alias prs='ps faux|grep -v grep|grep "$@"'
然后
prs my_prog