Ответ 1
с помощью ps
ps
позволяет пользователю определять собственное форматирование для своего вывода с помощью переключателя -o
и -C
для выбора записей по данной команде. Я бы пошел с:
ps -C java -o pid
на странице руководства:
-C cmdlist Select by command name
This selects the processes whose executable name is given in cmdlist.
-o format user-defined format.
format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify
individual output columns. The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers
may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty
(ps -o pid= -o comm=) then the header line will not be output. Column width will increase as needed for wide headers; this
may be used to widen up columns such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control
(ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality; output may be one
column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options when in doubt. Use the PS_FORMAT
environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose the default
UNIX or BSD columns.
Можно получить более точные результаты, указав больше ограничений (т.е. пользователя, под которым выполняется процесс и т.д.). Посмотрите на страницу руководства для получения дополнительной информации и других переключателей.
Пример:
$ sleep 10 &
[1] 12654
$ ps -C sleep -o pid
12654
с помощью оболочки
Я не знаю, почему вы используете .sh
script для запуска своего кода и не вызываете java
напрямую, но если в любом случае вы используете оператор &
(background), вы можете захватить pid
через вашу оболочку с переменной $!
.
например:
$ sleep 5 &
[1] 12395
$ echo $!
12395
то же самое для команды java -jar .. &
, $!
будет установлено в pid последнего заданного задания.