2010-08-16 2 views
3

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

С помощью этой команды:

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

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

Любые подсказки?

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

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

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

ответ

3

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


Пример:

This agent library содержит premain метод, который хранит текущую PID (доступ через JNA) в текстовом файле.

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

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

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

1

Я не знаю, если это будет делать трюк, но, чтобы найти идентификатор процесса, в более общем плане, я использую этот псевдоним

alias prs='ps faux|grep -v grep|grep "[email protected]"' 

, а затем

prs my_prog 
+0

Mmh не то, что я искал, потому что я хочу получить PID при запуске, а не потом, у меня также есть много экземпляров этого апплета – Disco

Смежные вопросы