Linux, как узнать, откуда запущен процесс

Обновлено: 21.11.2024

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

Хотя команда ps является наиболее очевидной командой для изучения процессов, аргументы, которые вы используете при запуске ps, будут иметь большое значение в том, какой объем информации будет предоставлен. Без аргументов ps будет отображать только процессы, связанные с вашим текущим сеансом входа в систему. Добавьте -u, и вы увидите расширенную информацию.

Вот сравнение:

Использование ps -ef отобразит сведения обо всех процессах, запущенных в системе, но ps -eF добавит некоторые дополнительные сведения.

Обе команды показывают, кто запускает процесс, идентификаторы процесса и родительского процесса, время запуска процесса, суммарное время выполнения и выполняемую задачу. Дополнительные поля, отображаемые при использовании F вместо f, включают:

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

пс -фу

Вы можете просмотреть список процессов для определенного пользователя с помощью команды типа "ps -ef | grep USERNAME", но с помощью команды ps -fU вы увидите значительно больше данных. Это связано с тем, что также включены сведения о процессах, которые выполняются от имени пользователя. На самом деле, почти все эти показанные процессы были запущены системой просто для поддержки онлайн-сеанса этого пользователя. Nemo только что вошел в систему и еще не запускает никаких команд или сценариев.

Обратите внимание, что единственным процессом с назначенным TTY является оболочка Nemo, а родителем всех остальных процессов является systemd.

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

верхний и ntop

Команды top и ntop помогут вам получить представление о том, какие процессы используют больше всего ресурсов, и позволят изменить порядок представления в зависимости от того, какие критерии вы хотите использовать для ранжирования процессов (например, самый высокий уровень ЦП или памяти). использовать).

Используйте Shift+M для сортировки по использованию памяти и Shift+P для возврата к сортировке по использованию ЦП (по умолчанию).

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

Некоторые из наиболее полезных для просмотра файлов /proc включают cmdline, environ, fd, limit и status. В следующих представлениях приведены некоторые примеры того, что вы можете увидеть.

В файле состояния отображается запущенный процесс (bash), его статус, идентификатор пользователя и группы пользователя, выполняющего bash, полный список групп, членом которых является пользователь, а также идентификатор процесса и идентификатор родительского процесса. .

Файл cmdline показывает командную строку, используемую для запуска процесса.

В файле среды показаны действующие переменные среды.

Файл fd показывает файловые дескрипторы. Обратите внимание, как они отражают используемый псевдотерминал (pts/0).

Файл лимитов содержит информацию об ограничениях, наложенных на процесс.

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

Присоединяйтесь к сообществам Network World на Facebook и LinkedIn, чтобы комментировать самые важные темы.

Сандра Генри-Стокер занимается администрированием систем Unix более 30 лет. Она описывает себя как «USL» (Unix как второй язык), но помнит достаточно английского, чтобы писать книги и покупать продукты. Она живет в горах в Вирджинии, где, когда не работает с Unix и не пишет о ней, отгоняет медведей от своих кормушек для птиц.

В среде Windows есть API для получения пути, по которому запущен процесс.Есть ли что-то подобное в Unix/Linux?

Или есть другой способ сделать это в этих средах?

11 ответов 11

В Linux символическая ссылка /proc/

/exe содержит путь к исполняемому файлу. Используйте команду readlink -f /proc/

/exe для получения значения.

В AIX этот файл не существует. Вы можете сравнить cksum и cksum /proc/

Вы можете легко найти исполняемый файл этими способами, просто попробуйте сами.

Это потрясающе. Я знал, что запустил его из места, которое имело символическую ссылку на исходный исполняемый файл (одну из многих версий). pwdx

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

Последние два (pwdx и lsof) могут дать неверный результат. Вопрос был о полном пути к исполняемому файлу. pwdx и lsof дадут вам cwd процесса, а не путь к процессу. Я думаю, что ответ jpalecek более точен, поскольку первоначальный запросчик запросил путь к исполняемому файлу, а не мягкую ссылку, описывающую исполняемый файл.

| grep -m 1 txt , так как необходимая информация о пути процесса находится в первой строке с txt , а не в строке cwd? (Применимо к macOS и Ubuntu на дату публикации.)

Немного поздновато, но все ответы были специфичны для Linux.

Если вам нужен еще и unix, то вам нужно это:

ОТРЕДАКТИРОВАНО: исправлена ​​ошибка, о которой сообщил Марк Лаката.

Спасибо, что поделились Hiperion, но мне нужно было указать PID и получить путь к его exe, возможно ли это с помощью этого кода?

Замените 786 на свой PID или имя процесса.

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

Приведенная ниже команда ищет имя процесса в списке запущенных процессов и перенаправляет pid на команду pwdx, чтобы найти расположение процесса.

Замените "abc" вашим шаблоном.

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

Надеюсь, когда-нибудь это кому-нибудь поможет.

В Linux у каждого процесса есть своя папка в /proc. Таким образом, вы можете использовать getpid(), чтобы получить pid запущенного процесса, а затем соединить его с путем /proc, чтобы получить нужную папку.

Вот небольшой пример на Python:

Вот пример в ANSI C:

Скомпилируйте его с помощью:

Вывод Python в последней версии Ubuntu: >>> import os >>> print os.path.join('/proc', str(os.getpid())) /proc/24346

Не существует метода, который "гарантировало бы работу в любом месте".

Шаг 1 — проверить argv[0], если программа была запущена по полному пути, то (обычно) он будет иметь полный путь. Если он был запущен по относительному пути, то же самое (хотя для этого требуется получить текущий рабочий каталог с помощью getcwd().

Шаг 2, если ничего из вышеперечисленного не выполняется, состоит в том, чтобы получить имя программы, затем получить имя программы из argv[0], затем получить ПУТЬ пользователя из среды и просмотреть его, чтобы увидеть, есть подходящий исполняемый двоичный файл с таким же именем.

Обратите внимание, что argv[0] устанавливается процессом, выполняющим программу, поэтому он не надежен на 100 %.

спасибо : Kiwy
с AIX:

Вы также можете получить путь в GNU/Linux с помощью (не проверено):

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

Найти путь к имени процесса

Что делает этот не очень эффективный код, так это получает имя процесса (по сути, строка "PID" заменяет pgrep ); в следующей строке получает путь исполняемого бинарника ( /proc/$PID/exe — символическая ссылка на исполняемый файл); и, наконец, он повторяет эту символическую ссылку.

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

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

  • Система под управлением Linux
  • Учетная запись с правами root или sudo
  • Доступ к окну терминала/командной строке

Процессы в Linux

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

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

Примечание. Узнайте больше о завершении процессов Linux в нашем руководстве по завершению процессов в Linux.

Список запущенных процессов в Linux

Чтобы получить список запущенных в данный момент процессов, используйте команды Linux ps , top , htop и atop . Вы также можете комбинировать команду ps с командой pgrep для идентификации отдельных процессов.

Вывод списка запущенных процессов в Linux с помощью команды ps

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

Команда ps использует следующий синтаксис:

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

  • a : список всех разрушающих процессов для всех пользователей.
  • -A, -e : список всех процессов в системе.
  • -a : список всех процессов, кроме лидеров сеансов (экземпляры, где идентификатор процесса совпадает с идентификатором сеанса) и процессов, не связанных с терминалом.
  • -d : перечислить все процессы, кроме лидеров сеансов.
  • --deselect, -N : перечислить все процессы, кроме тех, которые соответствуют определенному пользователем условию.
  • f : отображает иерархию процессов в формате ASCII.
  • -j : отображает выходные данные в формате заданий.
  • T : список всех процессов, связанных с этим терминалом.
  • r : список только запущенных процессов.
  • u : разверните вывод, чтобы включить дополнительную информацию, например об использовании ЦП и памяти.
  • -u : укажите пользователя, процессы которого вы хотите вывести в список.
  • x : включить процессы без TTY.

Примечание. Проверьте полный список параметров команды ps с помощью команды man ps .

Выполнение команды ps без каких-либо параметров приводит к выводу, подобному следующему:

Вывод по умолчанию включает следующие категории:

  • PID: идентификационный номер процесса.
  • TTY: тип терминала, на котором запущен процесс.
  • ВРЕМЯ: общая загрузка ЦП.
  • CMD: имя команды, запустившей процесс.

Использование комбинации параметров a , u и x приводит к более подробному выводу:

Новые категории расширенных выходных данных включают:

  • ПОЛЬЗОВАТЕЛЬ: имя пользователя, запускающего процесс.
  • %CPU: процент использования ЦП.
  • %MEM: процент использования памяти.
  • VSZ: общая виртуальная память, используемая процессом, в килобайтах.
  • RSS: размер резидентного набора, часть оперативной памяти, занимаемая процессом.
  • STAT: текущее состояние процесса.
  • НАЧАЛО: время запуска процесса.

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

Примечание. При использовании нескольких параметров команды ps, содержащих символ тире ("-"), вам нужно использовать только один символ тире перед перечислением параметров. Например, чтобы использовать команду ps с параметрами -e и -f, введите ps -ef .

Отфильтровать список процессов по пользователю с помощью:

Например, отображение списка процессов, запущенных пользователем phoenixnap:

Список запущенных процессов в Linux с помощью команды top

Команда top отображает список запущенных процессов в порядке убывания загрузки ЦП. Это означает, что самые ресурсоемкие процессы отображаются вверху списка:

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

  • PID: идентификационный номер процесса.
  • ПОЛЬЗОВАТЕЛЬ: имя пользователя, запускающего процесс.
  • PR: приоритет планирования для процесса.
  • NI: хорошее значение процесса с отрицательными числами, указывающими на более высокий приоритет.
  • VIRT: объем виртуальной памяти, используемый процессом.
  • RES: объем резидентной (физической) памяти, используемой процессом.
  • SHR: общий объем общей памяти, используемой процессом.
  • S: статус процесса — R (выполняется) или S (спящий).
  • %CPU: процент использования ЦП.
  • %MEM: процент использования памяти.
  • ВРЕМЯ+: общая загрузка ЦП.
  • КОМАНДА: имя команды, запустившей процесс.

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

  • c: показать абсолютный путь к процессу.
  • d: изменить частоту обновления вывода на заданное пользователем значение (в секундах).
  • h: отображение окна справки.
  • k: завершить процесс, указав PID.
  • M: отсортировать список по использованию памяти.
  • N: отсортировать список по PID.
  • r: изменить значение nice (приоритет) процесса, указав PID.
  • z: измените цвет вывода, чтобы выделить запущенные процессы.
  • q: выйти из командного интерфейса.

Примечание. В параметрах взаимодействия с командой top учитывается регистр. Не забудьте сначала отключить Caps Lock.

Вывод списка запущенных процессов в Linux с помощью команды htop

Команда htop предлагает те же выходные данные, что и команда top, но в более понятном и удобном для пользователя виде.

Поскольку большинство дистрибутивов Linux не включают эту команду, установите ее с помощью:

Использование команды htop дает следующий результат:

Используйте следующие клавиши для взаимодействия с командой htop:

  • Клавиши направления: прокрутка списка процессов по вертикали и горизонтали.
  • F1: открыть окно справки.
  • F2: открыть настройку команды htop.
  • F3: поиск процесса по имени.
  • F4: фильтровать список процессов по имени.
  • F5: переключение между отображением иерархии процессов в виде отсортированного списка или дерева.
  • F6: отсортировать процессы по столбцам.
  • F7: уменьшить значение nice (повысить приоритет) процесса.
  • F8: увеличить значение nice (уменьшить приоритет) процесса.
  • F9: завершить выбранный процесс.
  • F10: выход из командного интерфейса.

Вывод списка запущенных процессов в Linux с помощью команды atop

Команда atop предоставляет более полный обзор запущенных процессов по сравнению с командой top. Начните с установки команды atop с помощью:

Команда atop создает вывод, аналогичный следующему:

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

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

  • PID: идентификационный номер процесса.
  • SYSCPU: использование ЦП процессом при обработке системы.
  • USRCPU: использование ЦП процессом при работе в пользовательском режиме.
  • VGROW: объем виртуальной памяти, который процесс занял с момента последнего обновления выходных данных.
  • RGROW: объем физической памяти, который процесс занял с момента последнего обновления выходных данных.
  • RUID: реальный идентификатор пользователя, запустившего процесс.
  • ST: текущий статус процесса.
  • EXC: код выхода после завершения процесса.
  • THR: количество потоков, используемых процессом.
  • S: текущий статус основного потока процесса.
  • CPUNR: количество процессоров, используемых процессом.
  • ЦП: процент ЦП, используемый процессом.
  • CMD: имя команды, запустившей процесс.

Использование команды atop со следующими параметрами изменяет формат вывода:

  • -a: показывать только активные процессы.
  • -c : показать командную строку для каждого процесса.
  • -d : показать информацию о диске.
  • -l : ​​показать общие значения в среднем за секунду.
  • -m : показать информацию о памяти.
  • -n : показать информацию о сети.
  • -s : показать информацию о планировании процесса.
  • -v : показать подробный вывод.
  • -y : показать отдельные темы.

Используйте следующие флаги для взаимодействия с командой atop:

  • a: Сортировка по наиболее активным ресурсам.
  • c: сортировка по потреблению ЦП.
  • d: сортировка по активности на диске.
  • m: сортировка по использованию памяти.
  • n: сортировать по сетевой активности.

Поиск идентификаторов процессов с помощью команды pgrep

Использование команды pgrep позволяет выполнять поиск определенного процесса. Команда pgrep использует следующий синтаксис:

Например, используйте следующую команду для поиска процесса firefox:

В выходных данных команды указан PID процесса:

Использование этого PID с командой ps позволяет получить больше информации о процессе. В этом примере использование PID 1439 предоставляет информацию о процессе firefox:

После прочтения этого руководства вы сможете использовать команды ps , top , htop и atop для просмотра запущенных процессов в Linux и управления ими.

Используйте доступные параметры команды для настройки вывода и поведения команды.

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

Введение в процессы Linux

Процесс – это выполнение программы. Их можно запускать при открытии приложения или при вводе команды через терминал командной строки.

Команда может только создать процесс. Однако приложение может запускать несколько процессов для разных задач. Например, Google Chrome будет запускать новый процесс каждый раз, когда открывается новая вкладка.

Каждому процессу Linux назначается уникальный PID (идентификационный номер процесса). Если возможных комбинаций не осталось, система может повторно использовать старые PID для новых процессов.

Процесс может быть инициирован как активный или фоновый процесс.

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

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

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

Как составить список запущенных процессов в Linux?

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

  • ps — выводит представление обо всех процессах, также может использоваться с параметрами для более точного вывода
  • вверху — показывает список запущенных процессов в реальном времени
  • htop — результаты в режиме реального времени в удобном для пользователя виде

Давайте углубимся в каждый из них.

Использование команды «ps»

Команда ps (состояния процессов) создает снимок всех запущенных процессов. Поэтому, в отличие от диспетчера задач Windows, результаты являются статическими.

Когда эта команда используется без каких-либо дополнительных аргументов или параметров, она возвращает список запущенных процессов вместе с четырьмя важными столбцами: PID, имя терминала (TTY), время выполнения (TIME) и имя команды. который запускает процесс (CMD). Вы можете использовать ps aux для получения более подробной информации о запущенных процессах. Вот разбивка каждого аргумента:

  • параметр выводит все запущенные процессы всех пользователей в системе.
  • Параметр u предоставляет дополнительную информацию, например процент использования памяти и ЦП, код состояния процесса и владельца процессов.
  • Опция
  • x перечисляет все процессы, не запущенные с терминала. Прекрасным примером этого являются демоны, связанные с системой процессы, которые запускаются в фоновом режиме при загрузке системы.

Если вы хотите просмотреть список процессов Linux в иерархическом представлении, используйте команду ps -axjf.В этом формате оболочка помещает дочерние процессы в родительские процессы. Помимо этих двух опций, вот несколько других распространенных примеров команды ps, отображающих список запущенных процессов в Linux:

  • ps -u [имя пользователя] выводит список всех запущенных процессов определенного пользователя.
  • ps -e или ps -A отображает активные процессы Linux в общем формате UNIX.
  • ps -T выводит активные процессы, которые выполняются с терминала.
  • Ps -C имя_процесса отфильтрует список по имени процесса. Кроме того, эта команда также показывает все дочерние процессы указанного процесса.

Использование команды «top»

Команда top используется для обнаружения ресурсоемких процессов. Эта команда Linux отсортирует список по использованию ЦП, поэтому процесс, который потребляет больше всего ресурсов, будет помещен вверху. Также полезно проверить, запущен ли определенный процесс.

В отличие от команды ps вывод команды top периодически обновляется. Это означает, что вы будете видеть обновления использования ЦП и времени работы в режиме реального времени. Как только оболочка вернет список, вы можете нажать следующие клавиши для взаимодействия с ним:

После установки введите htop, и вы получите список всех ваших процессов Linux. Как и предыдущая команда, htop также имеет несколько сочетаний клавиш:

< td>Понизить приоритет процесса.
КлавишиФункции
F9Завершить процесс .
F8Увеличить приоритет процесса.
F7
F6Сортировать процессы по любому столбцу.
F5Отображать процессы в виде дерева.
F4Фильтровать процессы по имени.
F3Поиск процесса.
F2Открыть настройку htop.
F1Отобразить меню справки.

Заключение

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

Какую из трех команд вы предпочитаете? Поделитесь своими мыслями в разделе комментариев ниже!

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