Как посмотреть java процессы на linux

Обновлено: 05.07.2024

ps (processes status — статус процессов) — это встроенная утилита Unix/Linux для просмотра информации, касающейся выбора запущенных процессов в системе: она считывает эту информацию из виртуальных файлов в файловой системе /proc. Это одна из важных утилит для системного администрирования, особенно в рамках мониторинга процессов, чтобы помочь вам понять, что происходит в системе Linux.

Программа ps имеет множество опций для манипулирования выходными данными, однако вы найдёте небольшое количество из них практически полезными для ежедневного использования.

Утилита ps выводит снимок процессов на вашем компьютере Linux. Вы сможете найти процессы по имени, пользователю или даже терминалу с таким количеством деталей, сколько вам нужно. В этой статье подготовлено множество примеров использования ps.

Управление процессами в Linux

Сердцем всех Linux и Unix-подобных операционных систем является ядро. Среди его многочисленных обязанностей — распределение системных ресурсов, таких как оперативная память и процессорное время. Они должны выполняться в режиме реального времени, чтобы все запущенные процессы получали свою справедливую долю в соответствии с приоритетом каждой задачи.

Иногда задачи могут блокироваться, или зацикливаться, или перестать отвечать по другим причинам. Или они могут продолжать работать, но сожрать слишком много процессорного времени или оперативной памяти, или вести себя каким-то похожим антисоциальным образом. Иногда задачи должны быть убиты для сохранения стабильной работы системы. Разумеется, первых шаг заключается в идентификации проблемного процесса.

Но, возможно, у вас вообще нет проблем с задачами или производительностью. Возможно, вам просто любопытно, какие процессы выполняются на вашем компьютере, и вы хотели бы заглянуть под капот операционной системы Linux. Команда ps удовлетворяет обоим этим требованиям. Она даёт вам снимок того, что происходит внутри вашего компьютера «прямо сейчас».

ps достаточно гибка, чтобы предоставить вам именно ту информацию, которая вам нужна, именно в том формате, который вам нравится. На самом деле, у ps очень много опций. Опции, описанные здесь, будут соответствовать большинству обычных потребностей. Если вы хотите изучить команду ps ещё глубже, то знакомство с командой ps в этой статье и примеры использования ps облегчат вам восприятие справочной страницы.

Программа для показа процессов в Linux

Самый простой способ использовать ps — запустить её без параметров:

ps

ps покажет список процессов в данном терминале.


В выводе присутствует четыре столбца:

  • PID: идентификационный номер процесса.
  • TTY: имя консоли, на которой пользователь выполнил вход.
  • TIME: количество времени центрального процессора, которое потребил процесс.
  • CMD: имя команды, которая запустила процесс

Как увидеть все процессы в Linux

Добавление опции -e (выбрать все процессы) сделает так, что ps перечислит процессы, которые были запущены всеми пользователями, а не только пользователем, который запускает команду ps. Поскольку это будет длинный список, то вы можете добавить команду less.

Список процессов с возможностью прокрутки в команде less:


Теперь записей о процессах намного больше, но мы видим те же четыре столбца, что и раньше. Вопросительный знак (?) в столбце TTY означает, что процесс запускался не из окна терминала.

Отображение иерархии процессов (дерево процессов в Linux)

Если вы видите, какие процессы запустили другие процессы, то иногда это может помочь выяснить проблему или определить конкретный процесс. Для этого мы используем опцию -H.

Отступы указывают, какие процессы являются родителями каких других процессов.


Чтобы добавить немного ясности, мы можем попросить ps добавить несколько линий ASCII и нарисовать иерархию в виде дерева. Это можно сделать опцией --forest.

Это позволить проще отслеживать, какие процессы являются родителями других процессов.


Как напечатать дерево определённого процесса

Вы можете получить дерево процессов только нужной вам программы следующим образом (замените sshd на интересующий вас процесс):


Об опции -C будет рассказано далее в этой статье.

Фильтрация вывода ps по определённым строкам (по имени команды, например)

В этом случае выходные данные представляют собой одну запись для интересующего нас процесса. Конечно, если бы мы запустили несколько экземпляров Firefox, в списке было бы более одного элемента.


Больше столбцов в выводе ps

Чтобы добавить дополнительные столбцы к выводу, используйте параметр -f (полный формат).

Дополнительный набор столбцов включён в вывод ps.


Добавлены следующие новые столбцы:

  • UID: идентификатор пользователя владельца этого процесса.
  • PPID: идентификатор родительского процесса.
  • C: Количество детей, которые есть у процесса.
  • STIME: Время начала. Время, когда процесс был запущен.

Используя опцию -F (дополнительный полный формат), мы можем получить ещё больше столбцов:

Если у вас маленькое окно терминала, то столбцы, которые мы получаем в этот раз, требуют прокрутки экрана в сторону, чтобы показать их все. Нажатие клавиши «Стрелка вправо» смещает дисплей влево.


Теперь добавились следующие столбцы:

  • SZ: размер страниц ОЗУ образа процесса.
  • RSS: резидентный размер набора. Это не подкачанная физическая память, используемая процессом.
  • PSR: процессор, которому назначен процесс.

Нужно ли указывать дефис перед опциями ps

В некоторых примерах вы можете увидеть использование ps с опциями без дефиса или с длинными вариантами написания опций в стиле GNU. Для совместимости, ps поддерживает все три формата. Опции без дефиса — это стиль BSD и значение опций с дефисом и без может быть различным!

Пример показа процессов в формате BSD:

В этой команде значение опций следующее:

  • u — ориентированный на пользователя формат
  • a — убирает ограничение «только свои процессы»
  • x — убирает ограничение «только процессы с терминалом»

Проще говоря, если использовать вместе a и x, то будут показаны все процессы.

Нужно быть аккуратным, и не забывать ставить дефис если вы используете опции UNIX, поскольку в случае неопределённости ps будет пытаться трактовать в разных вариантах. В этой инструкции кроме рассмотренного примера везде используются опции UNIX.

Поиск процессов по идентификатору процесса

Как только вы нашли идентификатор процесса для интересующего вас процесса, вы можете использовать его с командой ps, чтобы вывести подробную информацию об этом процессе. Для этого используйте спользуйте параметр -p после которого укажите число — идентификатор процесса:

Можно указывать более чем один идентификатор процесса, перечислив их через запятую или через пробел.

Поиск процессов по имени команды

Опция -C КОМАНДА позволяет вам искать процесс, используя имя команды. То есть имя команды, которая запустила процесс. Это несколько отличается от строки команды, которая может включать имена путей и параметры или опции.

Выведена информация только о процессе, запущенным указанной командой:


Процессов может быть несколько если запущено множество экземпляров данной команды:


Как увидеть потоки процесса

Чтобы вывести все потоки процесса, используйте флаг -H. Опция -L приведёт к показу столбца LWP (light weight process — процесс с малым весом), а также столбца NLWP (number of light weight process — число процессов с малым весом).

Как увидеть процессы определённого пользователя

Чтобы увидеть процессы, принадлежащие конкретному пользователю, используйте опцию -u СПИСОК ПОЛЬЗОВАТЕЛЕЙ:

Отображаются процессы, принадлежащие учётной записи пользователя mial.


Как вывести все процессы запущенные пользователем root

Это частный случай показа процессов определённого пользователя.

Команда ниже позволяет вам просматривать каждый процесс, работающий с привилегиями пользователя root (действительный и эффективный идентификатор) в формате пользователя.

Просмотр групповых процессов

Если вы хотите перечислить все процессы, принадлежащие определённой группе (реальный идентификатор группы (RGID) или имя), введите:

Чтобы вывести список всех процессов, принадлежащих эффективному имени группы (или сеанса), введите.

Листинг процессов по терминалам

Чтобы увидеть процессы, связанные с TTY, используйте опцию -t УКАЖИТЕ TTY. При использовании без номера TTY опция -t сообщает о процессах, связанных с текущим окном терминала.

Все перечисленные процессы связаны с pts/1.


Выбор столбцов для отображения

С опцией -o ФОРМАТ вы можете выбрать, какие столбцы вы хотите включить в вывод ps. Столбцы нужно указывать по имени. В руководстве по ps:

вы найдёте длинный список имён столбцов в разделе STANDARD FORMAT SPECIFIERS.

В следующем примере мы выводим потребление процессом времени центрального процессора (pcpu), потребление процессором памяти (pmem) и запустившая его команда вместе с опциями (args):

Обратите внимание, что опция -o не добавляет столбцы в стандартным, а выводит только запрошенные поля.


Сортировка вывода по столбцам

Вы можете отсортировать вывод, используя опцию --sort. Давайте отсортируем вывод по столбцу CPU:

Дефис «-» означает сортировку от большего к меньшему.

Чтобы увидеть десять самых ресурсоемких процессов, передайте вывод через команду head:

Мы получаем отсортированный, усечённый список.

Если мы добавим больше столбцов для вывода, мы сможем отсортировать по большему количеству столбцов.

Без дефиса или со знаком «+» сортировка выполняется от меньшего к большему.

Добавим в сортировку столбец pmem:

Сортировка по-прежнему выполняется по значению pcpu, но если для каких-то записей эти значения одинаковые, то выполняется сортировка по pmem для этих значений.

Давайте сделаем вывод результатов немного более полезным и добавим столбец идентификатора процесса (pid), чтобы мы могли видеть номер процесса каждого процесса в нашем листинге.

Теперь мы можем идентифицировать процессы.

Все возможные поля ps

Чтобы увидеть все возможные для вывода поля ps выполните такую команду:

Эти поля вы можете применять с опцией -o.

Примеры настраиваемого вывода ps

Команда ниже позволяет вам увидеть PID, PPID, имя пользователя и команду процесса.

Ниже приведён ещё один пример пользовательского формата вывода, показывающий группу файловой системы, значение nice, время начала и истекшее время процесса.

Как найти имя процесса по PID

Чтобы найти имя процесса, используя его PID.

Показать родительский и дочерний процессы

Чтобы выбрать конкретный процесс по его имени, используйте флаг -C, это также отобразит все его дочерние процессы.

Чтобы найти все PID всех экземпляров процесса, что полезно при написании сценариев, которые должны считывать PID из выходных данных (из стандартного входа).

Как выключить процесс по идентификатору процесса

Мы рассмотрели ряд способов идентификации процессов, включая имя, команду, пользователя и терминал. Мы также рассмотрели способы идентификации процессов по их динамическим атрибутам, таким как использование процессора и памяти.

Так или иначе, мы можем определить процессы, которые работают. Зная их идентификатор процесса, мы можем (если нужно) остановить любой из этих процессов с помощью команды kill. Если бы мы хотели убить процесс 898, мы бы использовали этот формат:

Помните о том, что в некоторых случаях процесс не завершается и при этом не выводится никаких ошибок или предупреждений. На самом деле, данная команда является «рекомендательной», она «просит» процесс завершиться. Подробности смотрите в статье «Почему команда kill не убивает процесс?».

Как выключить процесс зная его имя

Команда pkill позволяет вам убивать процессы по имени. Убедитесь, что вы определили правильный процесс! Эта команда завершит процесс top.

Как остановить несколько процессов по имени

Если у вас запущено несколько копий процесса, или процесс породил несколько дочерних процессов (как это может сделать Google Chrome), как вы можете выключить их? Это так же просто. Мы используем команду killall.

У нас запущено два экземпляра top:

Мы можем завершить их обоих с помощью этой команды:

Отсутствие ответа означает отсутствие проблем, т. е. оба эти процессы были остановлены.


Прежде чем убить процесс

Убедитесь, что это тот, который вам нужен, и убедитесь, что это не вызовет никаких проблем. В частности, стоит проверить с помощью параметров -H и --forest, чтобы убедиться, что в нем нет важных дочерних процессов, о которых вы забыли.

Устранение неполадок производительности системы Linux

Если ваша система не работает должным образом, например, если она необычно медленная, вы можете выполнить некоторые неполадки системы следующим образом.

Чтобы найти все процессы, потребляющие больше всего памяти и ЦПУ в Linux:

Вывод информации о безопасности

Показать контекст безопасности (специально для SELinux) можно следующим образом:

С помощью этой команды вы также можете отобразить информацию о безопасности в определённом пользователем формате:

Выполните мониторинг процессов в режиме реального времени с помощью утилиты watch

Наконец, поскольку ps отображает статическую информацию, вы можете использовать утилиту watch для непрерывного обновления информации на экране и мониторинга процессов в режиме реального времени с повторяющимся выводом. В этом примере информация будет одновляться через каждую секунду. Укажите свою собственную команду ps для соответствия вашей цели.

На сайте уже есть несколько статей про процессы Linux, в которых подробно описано как ими управлять или как завершить один или группу процессов, но это еще не все. Чтобы правильно управлять процессами и ориентироваться в них вам нужно научиться анализировать список процессов Linux, понимать что значит каждый пункт и зачем он нужен.

В этой статье мы подробно рассмотрим как посмотреть список процессов различными способами, разберем какими бывают процессы, почему так происходит и что с этим делать.

Список процессов в Linux

Я не буду подробно рассказывать про каждую команду, которую можно применять для просмотра списка запущенных процессов, вместо этого мы пройдёмся по основным утилитам для решения этой задачи, рассмотрим как посмотреть список потоков процесса, вывести процессы, которые выполняются на определённом ядре, а также как найти скрытые процессы. Но сначала надо разобраться с терминами.

  • Процесс - если говорить простыми словами, это программа и её данные, загруженные в память компьютера;
  • Дочерний процесс - процессы могут запускать другие процессы для выполнения параллельных задач или других целей такие процессы называются дочерними. Для них выделяется отдельная область в памяти;
  • Поток - поток отличается от процесса тем, что использует ту же память, данные и дескрипторы файлов, что и процесс, в котором он был создан.

1. Утилита ps

Самый простой способ посмотреть список процессов, запущенных в текущей командой оболочке, использовать команду ps без параметров:

Но вряд-ли вас интересует именно это. Чтобы посмотреть все процессы, добавьте опцию -e, а для максимально подробной информации - опцию -F:


Вот значение основных колонок в выводе утилиты:

  • UID - имя пользователя, от имени которого работает процесс;
  • PID - идентификатор пользователя;
  • PPID - идентификатор родительского процесса пользователя;
  • C - расходование ресурсов процессора, в процентах;
  • SZ - размер процесса;
  • RSS - реальный размер процесса в памяти;
  • PSR - ядро процессора, на котором выполняется процесс;
  • STIME - время, когда процесс был запущен;
  • TTY - если процесс привязан к терминалу, то здесь будет выведен его номер;
  • TIME - общее время выполнения процесса (user + system);
  • CMD - команда, которой был запущен процесс, если программа не может прочитать аргументы процесса, он будет выведен в квадратных скобках;

Чтобы посмотреть список процессов в виде дерева, и понимать какой процесс имеет какие дочерние процессы, выполните команду:


Для просмотра списка процессов с потоками используйте опцию -L:


Здесь появятся ещё две дополнительных колонки:

  • LWP - Это сокращение от LightWeight Proccess. Идентификатор потока;
  • NLWP - количество потоков у этого процесса.

Чтобы посмотреть список процессов определенного пользователя, например, sergiy используйте опцию -u:


Теперь давайте перейдём к другим, более интересным, интерактивным утилитам.

2. Утилита top

Утилита top не поставляется вместе с системой, поэтому вам придется её установить. Для этого в Ubuntu выполните:

sudo apt install top

Программа позволяет интерактивно просматривать список запущенных процессов Linux. Чтобы вывести список процессов Linux выполните команду:


Колонки, которые выводит программа очень похожи на ps:

  • PID - идентификатор процесса;
  • USER - имя пользователя, от имени которого выполняется процесс;
  • PR - приоритет планировщика, установленный для процесса;
  • NI - рекомендуемый приоритет процесса. Это значение можно менять, может не совпадать с реальным приоритетом планировщика;
  • VIRT - всё, что находится в памяти, используется или зарезервировано для использования;
  • RES - всё, что находится в оперативной памяти и относится к процессу. Расшифровывается как Resident Memory Size, указывается в килобайтах;
  • SHR - часть памяти из RES, которую занимают ресурсы, доступные для использования другим процессам. Расшифровывается - Shared Memory Size.
  • S - состояние процесса: D - ожидает завершения операции, R - запущен, S - спит, T - остановлен, t - остановлен отладчиком, Z - зомби;
  • %CPU - процент использования ресурсов процессора;
  • %MEM - процент использования ресурсов оперативной памяти на основе колонки RES;
  • TIME - обще процессорное время, которое процесс использовал с момента запуска;
  • COMAND - команда, с помощью которой был запущен процесс.

Для того чтобы сделать вывод программы цветным, нажмите Z:


Чтобы вывести дерево процессов Linux нажмите сочетание клавиш Shift+V:


Для отображения потоков нажмите Shift + H:


Если вам недостаточно стандартных полей с информацией о процессах, вы можете нажать Shift + F и выбрать дополнительные поля, которые надо отображать. Для выбора или удаления поля используйте пробел:


3. Утилита htop

Это ещё более мощная утилита для просмотра запущенных процессов в Linux. Пользоваться ею намного удобнее. Здесь поддерживаются не только горячие клавиши, но и управление мышью. А ещё она выводит всё в цвете, поэтому смотреть на данные намного приятнее. Для установки программы выполните:

sudo apt install htop

Для того чтобы запустить выполните в терминале:

Колонки, которые вы увидите в выводе программы, аналогичны тем, что доступны в top, поэтому я не буду рассматривать их здесь отдельно. Для настройки выводимых данных нажмите кнопку F2, затем перейдите в раздел Display Options:


Здесь надо отметить Tree view для вывода списка процессов в виде дерева, а также снять отметки с пунктов Hide threads. для отображения потоков. Здесь есть как потоки пространства пользователя userland process threads, так и потоки пространства ядра - kernel threads. Теперь всё это будет отображаться:

Для того чтобы настроить какие колонки будут отображаться используйте пункт меню Columns:

Тут вы можете выбрать какие колонки отображать, а какие нет, а также можете настроить их порядок.

4. Программа Gnome Monitor

Вы можете смотреть запущенные процессы не только в терминале, но и в графическом интерфейсе. Для этого можно использовать утилиту Gnome Monitor. У неё намного меньше возможностей, по сравнению даже с ps, но зато у неё есть графический интерфейс. Вы можете запустить программу из главного меню системы:

По умолчанию утилита отображает только процессы текущего пользователя. Если вы хотите получить все процессы кликните по иконке бутерброда и выберите Все процессы:

Теперь программа отображает все запущенные процессы Linux в системе. Здесь вы можете выполнять поиск по процессам, завершать их и многое другое. Но потоков и дерева процессов программа не показывает.

5. Утилита atop

Эта программа тоже позволяет посмотреть процессы в Linux , но немного в другом ключе. Утилиту больше интересует сколько тот или иной процесс потребляет ресурсов системы. Утилита даже может показывать потребление процессами пропускной способности диска и сети, но для этого ей необходим специальный патч ядра. Для установки программы в Ubuntu выполните:

sudo apt install atop

Затем запустите её:

Вот основные колонки, которые выводит утилита и их значения:

  • PID - идентификатор процесса;
  • CID - идентификатор контейнера, используется для контейнеров Docker;
  • SYSCPU - время, потраченное процессом на выполнение в пространстве ядра;
  • USRCPU - время, потраченное процессом на выполнение в пространстве пользователя;
  • VGROW - увеличение использования памяти колонки VIRT за последний период;
  • RGROW - увеличение использования памяти колонки RSS за последний период;
  • ST - статус процесса, N - новый, E - завершенный, S и С - процесс завершен принудительно с помощью сигнала;
  • EXC - код выхода или код сигнала, которым был завершен процесс;
  • THR - общее количество потоков в этом процессе;
  • S - состояние процесса, аналогично описанному для top;
  • CPUNR - номер ядра процессора, на котором запущен основной поток процесса;
  • CPU - процент использования ресурсов процессора;
  • CMD - команда, которой была запущена программа;
  • MEM - процент использования памяти;

Для того чтобы включить отображение потоков процесса нажмите y:


Для просмотра информации о памяти нажмите m, если хотите вернутся обратно, нажмите g:


Выводы

В этой статье мы разобрали самые основные способы посмотреть список процессов в Linux, как видите есть простые способы, но есть и более сложные и информативные. Какими способами вы пользуетесь чаще всего? Напишите в комментариях!

Как я могу перечислить все процессы Java в bash? Мне нужна командная строка. Я знаю, что есть команда ps , но я не знаю, какие параметры мне нужно использовать.

и посмотрите, как вы попадаете на

Недавняя Java-версия оснащена инструментом "jps" для процесса обработки виртуальной машины Java

является наиболее полезным. Печатает только pid и квалифицированное имя основного класса:

Вы можете использовать одиночную команду pgrep (не требует использования труб и нескольких команд):

Начиная с Java 7, самый простой способ и меньше подверженности ошибкам - просто использовать команду jcmd , которая является частью JDK, чтобы она работала так же на всех ОС.

Пример:

jcmd позволяет отправлять запросы диагностической команды на запущенную Java Виртуальная машина (JVM).

Это приведет к возврату всех запущенных java-процессов в среде linux. Затем вы можете убить процесс, используя идентификатор процесса.

Если я хочу просто перечислить java-процессы, используйте:

  • показать вам все процессы с длинными строками (arg: www)
  • filter (grep) только строки, содержащие слово java, и
  • отфильтруйте строку "grep java":)

(Кстати, этот пример не эффективен, но просто запоминается);)

вы можете передать вышеуказанные команды другим командам, например:

Когда я хочу узнать, выполняется ли какой-либо Java-класс, я использую следующую командную строку:

С точки зрения операционной системы имя команды процесса "java". Опция "ww" расширяет максимальные символы colum, поэтому можно grep FQN связанного класса.

Чтобы узнать список java, запущенный на машине Linux. ps -e | grep java

Там много способов сделать это. Вы можете использовать java.lang.ProcessBuilder и "pgrep", чтобы получить идентификатор процесса (PID) с чем-то вроде: pgrep -fl java | awk . Или, если вы работаете под Linux, вы можете запросить каталог /proc .

Я знаю, это кажется ужасным, и не переносимым, и даже плохо реализованным, я согласен. Но поскольку Java фактически работает в VM, по какой-то абсурдной причине, которую я не могу понять после более чем 15 лет работы JDK, почему невозможно увидеть вещи вне пространства JVM, это действительно смешно с вами думаю об этом. Вы можете делать все остальное, даже fork и join дочерние процессы (это был ужасный способ многозадачности, когда мир не знал о потоках или pthreads, что, черт возьми, что происходит с Java. ).

jps и jcmd не показывали мне никаких результатов, когда я пробовал это, используя openjdk-1.8 на redhat linux. Но даже если бы это было сделано, это показывает только процессы под текущим пользователем, которые не работают в моем случае. Использование ps | grep - это то, что я закончил, но путь класса для некоторых приложений Java может быть чрезвычайно длинным, что делает результаты неразборчивыми, поэтому я использовал sed для его удаления. Это немного грубо, но удаляет все, кроме: PID, User, java-class/jar, args.

Результаты выглядят примерно так:

Альтернативой для окон для отображения всех процессов является:

Но для этого потребуется разбор, чтобы сделать его более понятным.

Я использую это (хорошо на Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'

Как я могу перечислить все процессы Java в bash? Мне нужна командная строка. Я знаю, что есть команда, ps но не знаю, какие параметры мне нужно использовать.

пожалуйста, приложите немного больше усилий для исследования этого и описания вашей проблемы, есть много возможностей в зависимости от того, что именно вам нужно. Если вы знаете, что есть, ps то сначала попробуйте man ps , info ps и узнайте об этом в Интернете.

и посмотри, как у тебя дела

Последняя версия Java поставляется с инструментом состояния процесса виртуальной машины Java "jps"

Просто примечание: jps поставляется только с JDK, но не с JRE. На машинах с простыми средами выполнения Java не будет этого инструмента. как я могу получить только количество запущенных java-процессов?

очень полезно. Выводит только pid и квалифицированное имя основного класса:

Вы также можете использовать одну команду pgrep (не требует использования каналов и нескольких команд):

Начиная с Java 7 , самый простой и менее подверженный ошибкам способ - просто использовать команду, jcmd которая является частью JDK , чтобы она работала одинаково во всех ОС.

Пример:

jcmd позволяет отправлять запросы диагностических команд на работающую виртуальную машину Java (JVM).

Для лучшего формата вывода проверьте эту команду:

Хороший чистый результат; именно то, что я искал. Спасибо!

Это вернет все запущенные java-процессы в среде Linux. Затем вы можете убить процесс, используя идентификатор процесса.

ps aux | grep java

$ ps -fea|grep -i java

Если я хочу просто перечислить java-процессы, используйте:

Благодарим вас за этот фрагмент кода, который может оказать немедленную помощь. Правильное объяснение значительно повысило бы его образовательную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с похожими, но не идентичными вопросами. Пожалуйста , измените свой ответ , чтобы добавить объяснение, и дать указание о том , что применять ограничения и допущения. В частности, почему второй из них не показывает grep процесс?
  • показать вам все процессы с длинными строками (arg: www)
  • фильтровать (grep) только строки, содержащие слово java, и
  • отфильтровать строку "grep java" :)

(кстати, этот пример не самый эффективный, но его легко запомнить);)

вы можете передать указанное выше другим командам, например:

Когда я хочу узнать, выполняется ли определенный класс Java, я использую следующую командную строку:

Со стороны ОС имя команды процесса - «java». Параметр «ww» расширяет максимальное количество символов в столбце, поэтому можно найти FQN соответствующего класса с помощью grep.

Это то, что я искал - $ top просто выдает «java» в качестве команды, что не так уж и полезно при попытке выяснить, какой процесс загружает процессор. $ ps ww -fC java предоставляет недостающие части головоломки.

jps & jcmd не показывал мне никаких результатов, когда я пробовал использовать openjdk-1.8 в redhat linux. Но даже если он это сделал, он показывает только процессы под текущим пользователем, что не работает в моем случае. В итоге я использовал ps | grep, но путь к классам для некоторых java-приложений может быть очень длинным, что делает результаты неразборчивыми, поэтому я использовал sed для его удаления. Это все еще немного грубо, но удаляет все, кроме: PID, User, java-class / jar, args.

Результаты выглядят примерно так:

Альтернативой в Windows для перечисления всех процессов является:

Но это потребует некоторого анализа, чтобы сделать его более разборчивым.

Есть много способов сделать это. Вы можете использовать java.lang.ProcessBuilder и «pgrep» , чтобы получить идентификатор процесса (PID) с чем - то вроде: pgrep -fl java | awk . Или, если вы работаете под Linux, вы можете запросить /proc каталог.

Я знаю, это кажется ужасным, непереносимым и даже плохо реализованным, согласен. Но поскольку Java на самом деле работает в виртуальной машине, по какой-то абсурдной причине, которую я не могу понять после более чем 15 лет работы с JDK, поэтому невозможно увидеть вещи за пределами пространства JVM, с вами это действительно смешно подумай об этом. Вы можете делать все остальное, даже fork и join дочерние процессы (те были ужасным способом многозадачности , когда мир не знал о нитях или Pthreads , что такая ад! Что происходит в на с Java ?! :).

Как я могу перечислить все процессы Java в bash? Мне нужна командная строка Я знаю, что есть команда ps , но я не знаю, какие параметры мне нужно использовать.

и посмотрим, как вы попали

Недавние Java поставляются с Java Инструментом состояния процесса виртуальной машины "jps"

является наиболее полезным. Печатает только pid и квалифицированное имя основного класса:

Вы также можете использовать одну команду pgrep (не требует использования каналов и нескольких команд):

Начиная с Java 7 , самый простой способ и менее подверженный ошибкам - это просто использовать команду jcmd который является частью JDK , так что он будет работать одинаково на всех ОС.

Пример:

jcmd позволяет отправлять запросы диагностических команд на работающую Java виртуальную машину (JVM).

Это вернет все запущенные процессы Java в среде linux. Затем вы можете убить процесс, используя идентификатор процесса.

Для лучшего формата вывода проверьте эту команду:

ps aux | grep Java

$ ps -fea|grep -i Java

Если я хочу просто перечислить процессы Java, используйте:

  • показать вам все процессы с длинными строками (arg: www)
  • фильтровать (grep) только те строки, которые содержат Word Java, и
  • отфильтруйте строку "grep Java" :)

(кстати, этот пример не эффективный, но запоминающийся);)

вы можете передать вышеперечисленное другим командам, например:

Когда я хочу узнать, выполняется ли определенный класс Java, я использую следующую командную строку:

Со стороны операционной системы имя команды процесса - "Java". Опция "ww" расширяет максимальное количество символов в столбце, поэтому можно получить полное имя связанного класса.

jps & jcmd не показывал мне никаких результатов, когда я попробовал это с использованием openjdk-1.8 на redhat linux. Но даже если он это сделал, он показывает только процессы под текущим пользователем, который не работает в моем случае. Я использовал ps | grep, но путь к классам для некоторых приложений Java может быть очень длинным, что делает результаты неразборчивыми, поэтому я использовал sed для его удаления. Это немного грубовато, но удаляет все, кроме: PID, User, Java-class/jar, args.

Результаты выглядят примерно так:

Альтернатива на окнах для перечисления всех процессов:

Но это потребует некоторого разбора, чтобы сделать его более разборчивым.

Есть много способов сделать это. Вы можете использовать Java.lang.ProcessBuilder и "pgrep", чтобы получить идентификатор процесса (PID) с чем-то вроде: pgrep -fl Java | awk . Или, если вы работаете в Linux, вы можете запросить каталог /proc .

Я знаю, это кажется ужасным, непереносимым и даже плохо реализованным, я согласен. Но поскольку Java на самом деле работает в виртуальной машине, по какой-то нелепой причине, которую я не могу понять после более чем 15-летнего опыта работы с JDK, из-за этого невозможно увидеть вещи вне пространства JVM Это действительно смешно с тобой думать об этом. Вы можете делать все остальное, даже fork и join дочерние процессы (это был ужасный способ многозадачности, когда мир не знал о потоках или pthreads , какого черта! что происходит с Java ?! :).

Это лучше, так как он покажет вам только активные процессы, не включающие эту команду, которая также получила Java строку, которую [] выполняет.

Я использую это (хорошо для Debian 8): alias psj='ps --no-headers -ww -C Java -o pid,user,start_time,command'

Читайте также: