Инструменты пользователя

Инструменты сайта


процессы

Процессы

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

  • Идентификатор процесса (pid)
  • Открытые файловые дескрипторы (fd)
  • Обработчики сигналов (signal handler)
  • Текущий рабочий каталог (cwd)
  • Переменные окружения (environ)
  • Код возврата

Только один процесс в системе рождается особенным способом — init — он порождается непосредственно ядром.Все остальные процессы появляются путём дублирования текущего процесса с помощью системного вызова fork(2). После выполнения fork(2) получаем два практически идентичных процесса за исключением следующих пунктов:

  1. fork(2) возвращает родителю PID ребёнка, ребёнку возвращается 0;
  2. У ребёнка меняется PPID (Parent Process Id) на PID родителя.

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

Работа с процессами на примере команды - sleep. Это команда, устанавливает задержку на определенное время. Запускаем команду с задержкой 500 секунд. Знак & говорит о том, что процесс будет запущен в фоновом режиме.

sleep 500 &
[1] 2362

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

nohup sleep 500 &
[1] 3445
nohup: ignoring input and appending output to 'nohup.out'

с помощью команды jobs можно посмотреть выполняющиеся процессы. jobs показывает процессы запущенные только в текущей консоли

 jobs
[1]   Running                 sleep 500 &

Для взаимодействия с запущенными процессами используется команда fg (foreground) и номер процесса из jobs

fg 1

для остановка процесса используется сочетание клавиш Ctrl + z.

[1]+  Stopped                 sleep 500

Чтобы заново запустить процесс используем команду bg (background) и номер процесса из jobs

bg 1
[1]+ sleep 500 &

Если процесс удачно завершился, мы увидим вот такой симпатичный статус

 jobs
[1]+  Done                    sleep 500

Сигналы и управление процессами

ps

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

a - все процессы 
u - userlist
x - процессы, отсоединённые от терминала
ps aux | grep sleep
root      3373  0.0  0.0   5828   696 pts/0    S    14:12   0:00 sleep 500
root      3377  0.0  0.0  12776   928 pts/0    S+   14:12   0:00 grep sleep

Завершает (убиваем процесс) по его PID

 kill 3373
# завершает все процессы с именем sleep
killall sleep

pstree

Команда pstree показывает иерархически все процессы

 pstree
systemd─┬─2*[agetty]
        ├─cron
        ├─dbus-daemon
       ...
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-timesyn───{sd-resolve}
        └─systemd-udevd

pgrep

просмотр процессов

pgrep sleep -l
13344 sleep

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

pgrep -u johndoe  -l

top

Значение столбцов top:

значение описание
PID Это идентификатор процесса, уникальное положительное целое число, которое идентифицирует процесс.
USER Это имя пользователя, который запустил этот процесс.
PR Поле показывает приоритет выполнения процесса с точки зрения ядра.
NI Поле показывает nice-значение процесса.
VIRT Общий объем памяти, потребляемый процессом.Он включает в себя код программы, данные, хранящиеся в памяти, а также любые области памяти, которые были подкачены на диск.
RES Количество памяти, потребляемая процессом в оперативной памяти.
SHR Объем памяти, совместно используемый другими процессами.
S В этом поле отображается состояние процесса в однобуквенной форме(R - Runnable, D - Interruptible sleep, S - Uninterruptible sleep, T - Stopped, Z - Zombie).
%CPU Параметр выражает объем в процентах от общей доступной оперативной памяти ОЗУ.
%MEM Параметр выражает значение RES в процентах от общей доступной оперативной памяти.
TIME+ Общее время процессора, используемое процессом с момента его начала, с точностью до сотых долей секунды.
COMMAND Здесь отображено название процессов.

Сортировка списка процессов

  • M - для сортировки по памяти;
  • P - для сортировки по использованию CPU;
  • N - для сортировки по идентификатору процесса;
  • T - сортировать по времени работы.

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

Для завершения процесса нажимаем k, и указываем PID. Для завершения процесса посылается сигнал 15, и процесс программно завершается. Для жесткого завершения процесса, посылается сигнал 9, который завершит процесс игнорируя зависящие процессы.

Баттоны t и m, изменяют стиль отображения статистики процессора и памяти.

Список наиболее часто используемых сигналов:

имя описание
1 HUP Hangup. Отбой
2 INT Interrupt. В случае выполнения простых команд вызывает прекращение выполнения
3 QUIT Как правило, сильнее сигнала Interrupt
4 ILL Illegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка) Сигнал отправляется программе, в которой возникла проблема
8 FPE Floating Point Exception. Вычислительная ошибка, например, деление на ноль
9 KILL Всегда прекращает выполнение процесса
11 SEGV Segmentation Violation. Доступ к недозволенной области памяти
13 PIPE Была предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данные
15 TERM Software Termination. Требование закончить процесс (программное завершение)
17 CHLD Изменение статуса порожденного процесса
18 CONT Продолжение выполнения приостановленного процесса
19 STOP Приостановка выполнения процесса
20 TSTP Сигнал остановки , генерируемый клавиатурой. Переводит процесс в фоновый режим

uptime

uptime — утилита показывающая текущее время, время работы после загрузки, и нагрузку за последние 1, 5 и 15 минут. Уровень загрузки отображается в виде так называемого LA — числа процессов, ожидающих своей очереди на выполнение

uptime
15:01:14 up 12 days, 23:11,  1 user,  load average: 0.67, 0.32, 0.13

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

w
 15:07:53 up 12 days, 23:17,  1 user,  load average: 0.00, 0.08, 0.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
imeryk   pts/0    10.10.10.14    Mon13    1.00s  2.05s  1.11s sshd: imeryk [priv]

Другие статьи

процессы.txt · Последнее изменение: 2020/08/04 11:24 — admin