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 ファイルを作成し、 の -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 に答える