我试图从bash运行一个Java(jnlp)小程序,并获得创build的进程的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 "$@"
有没有一种方法来修改,以便给出subprocess的PID?
创建一个代理.jar文件并使用javaws
的-J选项加载。 -J
参数直接传递给目标虚拟机,并与.jnlp文件中的虚拟机参数相结合,因此您可以在与应用程序相同的进程中加载本地代理程序库。
例:
此代理程序库包含一个premain
方法,用于将当前PID(通过JNA访问)存储在文本文件中。
假设getpid.jar
和jna.jar
在当前目录中,可以使用:
javaws -J-javaagent:getpid.jar=pid.txt myapplet.jnlp
这将在将PID写入文件pid.txt
后启动该小程序。
我不知道这是否会做到这一点,但要找到一个PID,更一般地说,我使用这个别名
alias prs='ps faux|grep -v grep|grep "$@"'
接着
prs my_prog