Отображение PID с помощью скрипта bash

Отображение PID с помощью скрипта bash

Добрый день всем!

Я пытаюсь написать bash-скрипт для отображения всех процессов Java, однако мне бы хотелось, чтобы он отображался следующим образом.

 ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

Проблема с вышеприведенным примером заключается в том, что он показывает только один конкретный PID.

Поэтому я хочу ps aux|grep j\[a\]vaполучить PID каждого процесса, а затем запустить каждый PID в приведенной выше команде.

РЕЗУЛЬТАТ:

 root@reinhardt-VirtualBox:/home/reinhardt# ps -p 1959 -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
  PID MEMORY USER     GROUP    COMMAND         ARGS
 1959  13648 root     root     grep            grep --color=auto java

Я предполагаю, что будет создан какой-то цикл, вроде цикла for?

решение1

Не в том месте, где я могу это проверить, но это должно работать. readэто стандартная часть скриптинга оболочки, она помещает что-то из stdin (который может быть потоком или устройством, таким как /dev/tty) в переменную. Затем вы просто делаете цикл while

ps auwwx | gawk '/[j]ava/{print $1}' | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

Или проще, если в вашем UNIX есть pgrep:

pgrep java | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

Иногда вы можете использовать xargsв таких случаях. Помните, что по умолчанию xargs помещает группу аргументов в конец команды. Поэтому вам нужно скармливать ее по одному (с -n1) и размещать PID там, где вам нужно, с -i:

pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

(еще раз извиняюсь, если я неправильно понял синтаксис -i, сейчас я не могу проверить. Проверьте man-страницу, если что-то пойдет не так)

Связанный контент