Получить PID апплета javls jnlp под linux - PullRequest
3 голосов
/ 16 августа 2010

Я пытаюсь запустить апплет java (jnlp) из bash и получить PID созданного процесса.

Используя эту команду:

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

Возвращает pid первого экземпляра java, который загружает jnlp; я думаю, но это не имеет ничего общего с последним запущенным процессом Java.

Есть какие-нибудь подсказки?

Обнаружил оригинальные челюсти следующим образом:

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

Есть ли способ изменить, чтобы он выдавал PID дочернего процесса?

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Создайте файл агента .jar и загрузите его, используя параметр -J javaws.-J аргументы передаются непосредственно на целевую виртуальную машину и объединяются с аргументами vm в файле .jnlp, поэтому вы можете загрузить библиотеку локального агента в том же процессе, что и приложение.


Пример:

Эта библиотека агентов содержит метод premain, который сохраняет текущий PID (доступный через JNA ) в текстовом файле.

Предполагается, чтоgetpid.jar и jna.jar находятся в текущем каталоге, который можно запустить с помощью:

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

Это запустит апплет после записи его PID в файл pid.txt.

1 голос
/ 16 августа 2010

Я не знаю, поможет ли это, но чтобы найти pid, я использую этот псевдоним

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

, а затем

prs my_prog
...