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

30 полезных примеров команд ps для мониторинга процессов Linux

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

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

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

Обратите внимание, что ps создает вывод со строкой заголовка, которая представляет значение каждого столбца информации. Вы можете найти значение всех меток на справочной странице ps.

Список всех процессов в текущей оболочке

1. Если вы запустите команду ps без каких-либо аргументов, она отобразит процессы для текущей оболочки.

Распечатать все процессы в разных форматах

2. Отображение всех активных процессов в системе Linux в общем формате (Unix/Linux).

3. Показать все процессы в формате BSD.

4. Чтобы выполнить полноформатный листинг, добавьте флаг -f или -F .

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

5. Вы можете выбрать все процессы, принадлежащие вам (исполнитель команды ps, root в данном случае), введите:

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

$ ps -fU tecmint OR $ ps -fu 1000

7. Чтобы выбрать процессы пользователя по эффективному пользовательскому ID (EUID) или имени, используйте параметр -u . .

$ ps -fu tecmint OR $ ps -fu 1000

Распечатать все процессы, запущенные как root (реальный и эффективный идентификатор)

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

Читайте также:  Dhcp linux red hat

Показать групповые процессы

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

$ ps -fG apache OR $ ps -fG 48

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

Отображение процессов по PID и PPID

11. Вы можете составить список процессов по PID следующим образом.

12. Чтобы выбрать процесс по PPID, введите.

13. Сделайте выбор, используя список PID.

Отображение процессов по TTY

14. Чтобы выбрать процессы по tty, используйте флаг -t следующим образом.

$ ps -t pts/0 $ ps -t pts/1 $ ps -ft tty1

Распечатать дерево процессов

15. Дерево процессов показывает, как процессы в системе связаны друг с другом; процессы, чьи родители были убиты, принимаются init (или systemd).

16. Вы также можете распечатать дерево процессов для данного процесса.

$ ps -f --forest -C sshd OR $ ps -ef --forest | grep -v grep | grep sshd

Распечатать потоки процесса

17. Чтобы напечатать все потоки процесса, используйте флаг -L , это покажет LWP (облегченный процесс), а также столбцы NLWP (количество облегченных процессов).

Укажите пользовательский формат вывода

Используя параметры -o или -format, ps позволяет создавать пользовательские выходные форматы, как показано ниже.

18. Чтобы перечислить все спецификаторы формата, включите флаг L .

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

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

$ ps -p 1154 -o pid,ppid,fgroup,ni,lstart,etime

21. Чтобы найти имя процесса по его PID.

Отображение родительских и дочерних процессов

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

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

24. Проверяйте время выполнения процесса.

$ ps -eo comm,etime,user | grep httpd

Вывод ниже показывает, что служба HTTPD работает в течение 1 часа 48 минут и 17 секунд.

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

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

Читайте также:  Удалить линукс из винд

26. Найдите самые запущенные процессы по максимальной загрузке памяти и ЦП в Linux.

$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head OR $ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

27. Чтобы убить процессы Linux/не отвечающие приложения или любой процесс, который потребляет много времени ЦП.

Сначала найдите PID не отвечающего процесса или приложения.

Затем используйте команду kill, чтобы немедленно завершить его.

Печать информации о безопасности

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

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

$ ps -eo euser,ruser,suser,fuser,f,comm,label

Выполняйте мониторинг процесса в реальном времени с помощью Watch Utility

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

$ watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'

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

Вы также можете прочитать следующие статьи по теме.

  1. Как найти имя процесса по номеру PID в Linux
  2. Поиск самых запущенных процессов по максимальному использованию памяти и ЦП в Linux
  3. Руководство по командам Kill, Pkill и Killall для завершения процесса в Linux
  4. Как найти и остановить запущенные процессы в Linux
  5. Как запустить команду Linux в фоновом режиме и отсоединить процесс в терминале

Это все на данный момент. Если у вас есть полезные примеры команд ps, которыми вы можете поделиться (не забывая объяснить, что они делают), используйте форму комментариев ниже.

Источник

PS: Как я могу рекурсивно получить все дочерние процессы для данного PID

Как я могу получить все дерево процессов, порожденное данным процессом, как дерево, и только это дерево, то есть никакие другие процессы?

Вывод может выглядеть, например, как

 4378 ? Ss 0:10 SCREEN 4897 pts/16 Ss 0:00 \_ -/bin/bash 25667 pts/16 S+ 0:00 | \_ git diff 25669 pts/16 S+ 0:00 | \_ less -FRSX 11118 pts/32 Ss+ 0:00 \_ -/bin/bash 11123 pts/32 S+ 0:00 \_ vi 

Я не мог получить желаемый результат чисто с параметрами ps .

Читайте также:  Linux append to path

Следующее дает желаемый результат, но кажется немного сложным:

#!/bin/bash pidtree() < echo -n $1 " " for _child in $(ps -o pid --no-headers --ppid $1); do echo -n $_child `pidtree $_child` " " done >ps f `pidtree 4378` 

У кого-нибудь есть более простое решение?

10 ответов 10

pstree — очень хорошее решение, но оно немного сдержано. Вместо этого я использую ps —forest . Но не для PID ( -p ), потому что он печатает только определенный процесс, но для сеанса ( -g ). Он может распечатать любую информацию, которую ps может распечатать в причудливом дереве ASCII-изображений, определяющем опцию -o .

Итак, мое предложение по этой проблеме:

ps --forest -o pid,tty,stat,time,cmd -g 2795 

Если процесс не является лидером сеанса, то нужно применить немного больше трюка:

ps --forest -o pid,tty,stat,time,cmd -g $(ps -o sid= -p 2795) 

Сначала он получает идентификатор сеанса (SID) текущего процесса, а затем снова вызывает ps с этим sid.

Если заголовки столбцов не нужны, добавьте «=» после каждого определения столбца в параметрах «-o», например:

ps --forest -o pid=,tty=,stat=,time=,cmd= -g $(ps -o sid= -p 2795) 

Пример запуска и результат:

$ ps --forest -o pid=,tty=,stat=,time=,cmd= -g $(ps -o sid= -p 30085) 27950 pts/36 Ss 00:00:00 -bash 30085 pts/36 S+ 00:00:00 \_ /bin/bash ./loop.sh 31888 pts/36 S+ 00:00:00 \_ sleep 5 

К сожалению, это не работает для screen как он устанавливает sid для каждого дочернего экрана и всех внуков.

Чтобы все процессы порождались процессом, нужно построить все дерево. Я использовал awk для этого. Сначала он создает массив хешей, содержащий все PID => ,child,child. В конце он вызывает рекурсивную функцию для извлечения всех дочерних процессов данного процесса. Результат передается другому ps для форматирования результата. Фактический PID должен быть записан как аргумент awk вместо :

ps --forest $(ps -e --no-header -o pid,ppid|awk -vp= 'function r(s)>END') 

Для процесса SCREEN (pid = 8041) пример вывода выглядит следующим образом:

 PID TTY STAT TIME COMMAND 8041 ? Ss 0:00 SCREEN 8042 pts/8 Ss 0:00 \_ /bin/bash 8092 pts/8 T 0:00 \_ vim test_arg test_server 12473 pts/8 T 0:00 \_ vim 12972 pts/8 T 0:00 \_ vim 

Источник

Оцените статью
Adblock
detector