Linux ps aux grep

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

В Linux всё является файлами, в том числе процессы

Посмотреть можно следующим образом:

Используется расширенный grep, выбирающий файлы, содержащие в названии цифры

PID TTY TIME CMD
7438 pts/4 00:00:00 bash
7452 pts/4 00:00:00 ps

Выдает идентификатор оболочки пользователя

Смотрим файл exe

Он является символьной ссылкой, с ключом -l видим, что выполняется программа /bin/bash

lrwxrwxrwx 1 admin admin 0 мар 2 14:25 exe -> /bin/bash

Смотрим статус процесса:

Name: bash
State: S (sleeping)

Процесс в статусе sleeping. Наблюдается это потому, что при вводе more процесс bash разделился (forked), создалась копия, more была передана информация о том, что процесс выполняемый; к новому процессу подключились STD IN, STD OUT, STD ERR. И основной процесс (поскольку ему не была передана команда на продолжение) перешел в состояние sleeping.

Процесс ждет возврата more, как только more возвращается — передается сигнал _exit (ядро таким образом узнает о том, что процесс завершен). Родительский процесс при этом подхватит _exit статус more, more погибнет.

Если bash сессия завершается more остается orphan-процессом, но вское подхватывается init, upstart или systemd. Один из этих процессов дожидается _exit статуса more.

Идентификаторы процессов в Linux

PID идентификатор процесса
UID владелец процесса
EUID «эффективный» идентификатор пользователя (когда программа имеет SUID бит EUID не совпадает с PID)
GID идентификатор группы
EGID эффективный» идентификатор группы
PPID идентификатор родительского процесса рассматриваемого процесса

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


Возможные статусы процессов:

Runnable
Sleeping
Stoped
Zombie

Zombie процесс — завершившийся процесс, _exit статус котрого не был принят никаким родительским процессом. Zombie процессы в современном Linux встречаются крайне редко.

Процессы могут иметь определенное значение Nice — приоритет при выполнении по сравнению с другими процессами. -19 — максимальный приоритет, 20 — минимальный. Приоритет можно поменять используя renice.

Потоки (Threads) — части программы, которые могут выполняться совместно в рамках одного процесса. Один из потоков может контролировать определенный параметр и передавать его значение другому потоку.

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

В выводе можно заметить процессы с одинаковыми иденитификаторами, это и есть потоки. Они выполняются в рамках одного процесса и имеют также свои внутренние идентификаторы (колонка LP — light weight proccess).

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

Управление процессами в linux — команды администратора

Выводит процессы, выполняющиеся в настоящее время от имени пользователя

Одна из самых распространенных комбинаций флагов:

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

Все выполняющиеся процессы в системе

Обычно вывод списка процессов передается через | в grep (если производится поиск определенного процесса), в more или less (если необходим вывод всего списка)

Одна из следующих команд выводит дерево процессов (что позволяет увидеть порождение процесса и родительский процесс)

С grep подобная комбинация работает плохо, поэтому оптимальным является перенаправление вывода в файл и поиск в nano, mcedit или любом другом текстовом редакторе

Читайте также:  User bmp windows 10

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

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

1 GIGHUP — замечено прерывание процесса, сигнал на перезапуск (раньше при помощи этого сигнала перезапускались демоны)
2 SUGINT — прерывание, подобный сигнал передается при нажатии комбинации CTRL+C
3 SUGQUIT — преырывние процесса при возможности с создание coredump
9 SIGKILL — завершение процесса ядром (моментальное с возможной потерей данных)
15 SIGTERM — «мягкое» завершение процесса (с сохранением временных данных при возможности)

Практически применяются SUGINT при нажатии CTRL+C, SIGTERM (kill -15 PID / kill -TERM PID) и SIGKILL (kill -9 PID). Последняя команда является самой опасной и используется при необходимости мгновенно завершить процесс. Управление процессами в Linux на практике в большинстве случаев сводится в использованию ps и kill.

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

Источник

Remove grep command while grepping using ps command

I use ps command to find out all running process on my Linux and Unix system. The ps command shows information about a selection of the active processes on the shell. You may also pipe out ps command output through grep command to pick up desired output. Let us see how to exclude grep from ps outputs.

Example: Remove grep command while grepping using ps

Finding and listing processes on Unix

Let us run a combination of ps command and grep command to find out all Perl processes. Open the terminal and then type:
$ ps aux | grep ‘something’
For example, I am looking for a specific process called perl:
$ ps aux | grep perl
Sample output:

In the above example, I am getting the grep process itself. In other words, the grep command also appears in the filtering result, which is not helpful.

How to remove grep

To ignore grep process from the output, type any one of the following command at the CLI.

Removing grep with regex

Type the following to exclude grep from outputs:
$ ps aux | grep ‘[p]erl’

  • No ads and tracking
  • In-depth guides for developers and sysadmins at Opensourceflare✨
  • Join my Patreon to support independent content creators and start reading latest guides:
    • How to set up Redis sentinel cluster on Ubuntu or Debian Linux
    • How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
    • How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
    • A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
    • How to protect Linux against rogue USB devices using USBGuard

Join Patreon

Excluding grep with grep command

The syntax is:
$ ps aux | grep perl | grep -v grep
Here is what I see:

The above output indicate that I prevented ‘grep’ from showing up in ps results. In other words, we learned to remove grep command from ps output.

Understanding grep commands

You don’t want display grep command as the process in ps output, i.e., you want to prevent ‘grep’ from showing up in ps results.

  • In first command I used regex. It says find the character ‘p’ followed by ‘erl’ i.e. the expression ‘[p]erl’ matches only ‘perl’ not ‘[p]erl’, which is how the grep command itself is now shown in the process list.
  • The second command uses the -v option to invert the sense of matching, to select non-matching lines.

Say hello to pgrep

You can look up process based upon name to get PID. This is only useful when looking for process names and PIDs The syntax is:
pgrep process-name
pgrep -a process
pgrep -l process
pgrep -u user -a process
To find the process ID of the sshd daemon:
$ pgrep -u root sshd
1101
To list PID and full command line pass the -a to the pgrep command:
$ pgrep -a sshd
Sample outputs:

Читайте также:  File called windows old

To just list PID and process name pass the -l to the pgrep command:
$ pgrep -l firefox
7981 firefox

Conclusion

You learned how to avoid grep command from showing up in ps command results under Linux, macOS, *BSD or Unix-like systems. Pretty useful for excluding grep from process list when running ps. For more information see ps and grep command man pages by typing the following commands:
man ps
man grep

Источник

Команда ps в Linux

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

В этой статье мы рассмотрим как пользоваться ps, что с помощью неё можно посмотреть, а также какие основные опции можно использовать.

Что такое процесс?

Чтобы понять что отображает команда ps сначала надо разобратся что такое процесс. Процесс Linux — это экземпляр программы, запущенный в памяти. Все процессы можно разделить на обычные и фоновые. Более подробно об этом написано в статье управление процессами Linux. Linux — это многопользовательская система, каждый пользователь может запускать одни и те же программы, и даже один пользователь может захотеть запустить несколько экземпляров одной программы, поэтому ядру нужно как-то идентифицировать такие однотипные процессы. Для этого каждому процессу присваивается PID (Proccess Identificator).

Каждый из процессов может находиться в одном из таких состояний:

  • Запуск — процесс либо уже работает, либо готов к работе и ждет, когда ему будет дано процессорное время;
  • Ожидание — процессы в этом состоянии ожидают какого-либо события или освобождения системного ресурса. Ядро делит такие процессы на два типа — те, которые ожидают освобождения аппаратных средств и приостановление с помощью сигнала;
  • Остановлено — обычно, в этом состоянии находятся процессы, которые были остановлены с помощью сигнала;
  • Зомби — это мертвые процессы, они были остановлены и больше не выполняются, но для них есть запись в таблице процессов, возможно, из-за того, что у процесса остались дочерние процессы.

А теперь давайте перейдем ближе к практике.

Команда ps в Linux

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

$ ps опции

$ ps опции | grep параметр

Во втором варианте мы используем утилиту grep для того, чтобы отобрать нужные нам процессы по определенному критерию. Теперь рассмотрим опции утилиты. Они делятся на два типа — те, которые идут с дефисом Unix и те, которые используются без дефиса — BSD. Лучше пользоваться только опциями Unix, но мы рассмотрим и одни и другие. Заметьте, что при использовании опций BSD, вывод утилиты будет организован в BSD стиле.

  • -A, -e, (a) — выбрать все процессы;
  • -a — выбрать все процессы, кроме фоновых;
  • -d, (g) — выбрать все процессы, даже фоновые, кроме процессов сессий;
  • -N — выбрать все процессы кроме указанных;
  • — выбирать процессы по имени команды;
  • -G — выбрать процессы по ID группы;
  • -p, (p) — выбрать процессы PID;
  • —ppid — выбрать процессы по PID родительского процесса;
  • -s — выбрать процессы по ID сессии;
  • -t, (t) — выбрать процессы по tty;
  • -u, (U) — выбрать процессы пользователя.
  • — отображать информацию планировщика;
  • -f — вывести максимум доступных данных, например, количество потоков;
  • -F — аналогично -f, только выводит ещё больше данных;
  • -l — длинный формат вывода;
  • -j, (j) — вывести процессы в стиле Jobs, минимум информации;
  • -M, (Z) — добавить информацию о безопасности;
  • -o, (o) — позволяет определить свой формат вывода;
  • —sort, (k) — выполнять сортировку по указанной колонке;
  • -L, (H)— отображать потоки процессов в колонках LWP и NLWP;
  • -m, (m) — вывести потоки после процесса;
  • -V, (V) — вывести информацию о версии;
  • -H — отображать дерево процессов;
Читайте также:  Windows 10 постоянно просит активацию

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

Все процессы, кроме лидеров групп, в том же режиме отображения:

Все процессы, включая фоновые и лидеры групп:

Чтобы вывести больше информации о процессах используйте опцию -f:

При использовании опции -f команда выдает такие колонки:

  • UID — пользователь, от имени которого запущен процесс;
  • PID — идентификатор процесса;
  • PPID — идентификатор родительского процесса;
  • C — процент времени CPU, используемого процессом;
  • STIME — время запуска процесса;
  • TTY — терминал, из которого запущен процесс;
  • TIME — общее время процессора, затраченное на выполнение процессора;
  • CMD — команда запуска процессора;
  • LWP — показывает потоки процессора;
  • PRI — приоритет процесса.

Например, также можно вывести подробную информацию обо всех процессах:

Больше информации можно получить, использовав опцию -F:

Эта опция добавляет такие колонки:

  • SZ — это размер процесса в памяти;
  • RSS — реальный размер процесса в памяти;
  • PSR — ядро процессора, на котором выполняется процесс.

Если вы хотите получить еще больше информации, используйте вместо -f опцию -l:

Эта опция добавляет отображение таких колонок:

  • F — флаги, ассоциированные с этим процессом;
  • S — состояние процесса;
  • PRI — приоритет процесса в планировщике ядра Linux;
  • NI — рекомендованный приоритет процесса, можно менять;
  • ADDR — адрес процесса в памяти;
  • WCHAN — название функции ядра, из-за которой процесс находится в режиме ожидания.

Дальше мы можем отобрать все процессы, запущенные от имени определенного пользователя:

С помощью опции -H можно отобразить дерево процессов:

Если вас интересует информация только об определенном процессе, то вы можете использовать опцию -p и указать PID процесса:

Через запятую можно указать несколько PID:

Опция позволяет фильтровать процессы по имени, например, выберем только процессы chrome:

Дальше можно использовать опцию -L чтобы отобразить информацию о процессах:

Очень интересно то, с помощью опции -o можно настроить форматирование вывода, например, вы можете вывести только pid процесса и команду:

Вы можете выбрать такие колонки для отображения: pcpu, pmem, args, comm, cputime, pid, gid, lwp, rss, start, user, vsize, priority. Для удобства просмотра можно отсортировать вывод программы по нужной колонке, например, просмотр процессов, которые используют больше всего памяти:

Или по проценту загрузки cpu:

ps -FA —sort pcpu

Ещё одна опция — -M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:

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

Мы рассмотрели все основные возможности утилиты ps. Дальше вы можете поэкспериментировать с её параметрами и опциями чтобы найти нужные комбинации, также можно попытаться применить опции BSD.

Выводы

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

Источник

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