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

Операционная система (ОС) управляет множеством пользовательских запросов и задач. В большинстве случаев ОС поставляется только с одним ЦП и одной основной памятью, но может иметь несколько дисков уровня 2 и устройств ввода-вывода. Таким образом, пользователям необходимо делиться ресурсами, хотя для них это выглядит так, словно они занимают ресурсы эксклюзивно. Операционная система помещает пользовательские задачи, задачи ОС, почты, печати и другие ожидающие задачи в очередь и планирует их выполнение в соответствии с определенными правилами. В этом разделе описывается, как ОС управляет процессами.

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

Linux — это многозадачная система, и при управлении процессами ей необходимо получать о них информацию. Для управления процессами необходимо знать количество процессов и их статус. Для просмотра процессов доступно несколько команд.

Команда who#

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

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

$ who
admin     tty1         Jul 28 15:55
admin     pts/0        Aug  5 15:46 (192.168.0.110)
admin     pts/2        Jul 29 19:52 (192.168.0.110)
root     pts/3        Jul 30 12:07 (192.168.0.110)
root     pts/4        Jul 31 10:29 (192.168.0.144)
root     pts/5        Jul 31 14:52 (192.168.0.11)
root     pts/6        Aug  6 10:12 (192.168.0.234)
root     pts/8        Aug  6 11:34 (192.168.0.234)

Команда ps#

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

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

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

Таблица 1. Общие параметры команды ps

Например, чтобы вывести список всех процессов на терминале, выполните следующую команду.

$ ps -a
  PID TTY          TIME CMD
12175 pts/6    00:00:00 bash
24526 pts/0    00:00:00 vsftpd
29478 pts/5    00:00:00 ps
32461 pts/0    1-01:58:33 sh

Команда top#

И top, и ps могут отображать список выполняемых в данный момент процессов, но команда top позволяет многократно обновлять отображаемый список нажатием кнопки. Если top выполняется на переднем плане, она эксклюзивно занимает передний план, пока не будет завершена. Команда top обеспечивает отображение состояния системного процессора в реальном времени. Вы можете отсортировать список задач ЦП по загрузке ЦП, использованию памяти или времени выполнения задачи. Дополнительные возможности настройки отображения, такие как выбор столбцов или метода сортировки, доступны с помощью интерактивных команд или файла настройки.

На рисунке 1 показан пример вывода команды top.

Рисунок 1. Пример вывода команды

Команда kill#

Команда kill используется для завершения процесса вне зависимости от того, выполняется ли он на переднем плане или в фоновом режиме. Это отличатся от сочетания клавиш Ctrl+C, которое может завершать только процессы переднего плана. Завершить фоновый процесс может быть необходимо из-за интенсивного использования ресурсов ЦП или взаимоблокировки.

Команда kill отправляет сигнал для завершения работающих процессов. По умолчанию используется сигнал TERM, завершающий все процессы, которые не могут его перехватить. Чтобы завершить процесс, способный перехватывать сигнал TERM, используйте вместо него сигнал KILL (ИД сигнала 9).

Два типа синтаксиса команды kill:

kill [-s signal | -p] [-a] PID…
kill -l [signal]

Получить идентификатор процесса можно командой ps. Параметр -s указывает сигнал, отправляемый заданной программе. Сведения о сигнале можно просмотреть с помощью команды kill -l. Параметр -p указывает заданный ИД процесса.

Например, чтобы завершить процесс с ИД 1409, выполните от имени пользователя root следующую команду:

# kill -9 1409

Пример вывода команды kill с параметром -l

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Планирование процесса#

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

Использование команды at для запуска процессов в запланированное время#

Функция#

Команда at используется для запуска пакета процессов (серии команд) в запланированное время или дату и время.

Синтаксис команды at:

at [-V] [-q queue] [-f filename] [-mldbv] time
at -c job [job...]

Формат времени#

Запланированное время может быть в любом из следующих форматов.

  • чч:мм today (сегодня): если чч:мм предшествуют текущему времени, то выбранные команды будут выполнены в чч:мм на следующий день.
  • midnight (полночь), noon (полдень), teatime (полдник, обычно 16:00) и т. п.
  • 12-часовой формат, за которым следует am или pm.
  • Время и дата (месяц день, мм/дд/гг или дд.мм.гг). Запланированная дата должна идти за запланированным временем.

Запланированное время также может быть относительным, что подходит для планирования команд, которые будут выполняться в ближайшее время. Например, now+ N minutes/hours/days/weeks (сейчас + N минут, часов, дней или недель). N указывает заданное время, которое может составлять несколько дней или часов. Кроме того, запланированное время можно указывать словами, такими как today (сегодня), tomorrow (завтра) и т. п. Вот несколько примеров запланированного времени.

Предположим, что сегодня 7 июня 2019 г., сейчас 12:30 и вы хотите запустить команду в 16:30. Вы можете запланировать это время командой at любым из следующих способов.

 at 4:30pm
 at 16:30
 at 16:30 today
 at now+4 hours
 at now+ 240 minutes
 at 16:30 7.6.19
 at 16:30 6/7/19
 at 16:30 Jun 7

Хотя вы можете выбрать любой из примеров выше по своему усмотрению, рекомендуется использовать абсолютное время в 24-часовом формате, например at 16:30 6/7/19.

Полномочия#

Команда at позволяет запланировать выполнение команд только из стандартного ввода или из файла, указанного параметром -f. Если выполнить команду su для переключения ОС с пользователя A на пользователя B, а затем — команду at в командной строке оболочки пользователя B, то результат выполнения at отправляется пользователю B, а электронные письма (если есть) отправляются пользователю А.

Например, чтобы запустить команду slocate -u 8 июня 2019 г. в 10:00, выполните следующие команды от имени пользователя root:

# at  10:00  6/8/19
at> slocate -u
at>
[1]+   Stopped    at  10:00  6/8/19

Когда появится приглашение at\>, введите slocate -u и нажмите клавишу Enter. Повторите этот шаг, чтобы добавить другие команды, которые нужно выполнить 8 июня 2019 г. в 10:00. Затем нажмите Ctrl+D, чтобы выйти из команды at.

Администратор имеет право выполнять команду at без ограничений. Права других пользователей на запуск at определяются в файлах /etc/at.allow и /etc/at.deny.

Использование службы cron для периодического запуска команд#

Команда at может запускать команды в запланированное время, но только один раз. Это означает, что после указания запускаемых команд система завершает выполнение задачи в указанное время. Если вам нужно выполнять команды многократно, для этого подойдет служба cron.

Служба cron#

Служба cron находит в каталоге /var/spool/cron файлы crontab, названные по имени пользователя в файле /etc/passwd, загружает результаты поиска в память и выполняет указанные в файлах crontab команды. У каждого пользователя есть свой файл crontab со своим именем пользователя. Например, файл crontab пользователя userexample — это /var/spool/cron/userexample.

Кроме того, служба cron каждую минуту считывает файл конфигурации /etc/crontab, который можно редактировать в различных форматах. Если файлы crontab не найдены, cron переходит в спящий режим и освобождает системные ресурсы. Через минуту cron пробуждается, чтобы повторить поиск и выполнение команд. Таким образом, фоновый процесс потребляет немного ресурсов и каждую минуту пробуждается, чтобы проверить, есть ли команды для выполнения.

Затем результаты выполнения команд отправляются пользователям, указанным в переменной среды MAILTO в файле /etc/crontab. После запуска служба cron не требует ручного вмешательства за исключением случаев, когда необходимо заменить запланированные команды на новые.

Команда crontab#

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

Вот общие параметры команды crontab.

  • crontab -u //Задает службу cron пользователя. Этот параметр требуется, только если команда crontab запускается пользователем root.
  • crontab -l //Вывод сведений о службе cron пользователя.
  • crontab -r //Удаление службы cron пользователя.
  • crontab -e //Изменение службы cron пользователя.

Например, для вывода настроек службы cron пользователя root выполните следующую команду:

# crontab -u root -l

Файлы crontab#

В файлах crontab вводятся команды и запланированное время их выполнения. Каждая строка в файлах содержит шесть полей. Первые пять полей — это время выполнения указанной команды, а последнее — сама команда. Поля разделяются пробелами или табуляцией. Формат следующий:

minute hour day-of-month month-of-year day-of-week commands

Поля для каждой строки описаны в следующей таблице.

Таблица 2. Описание параметров

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

Например, чтобы ОС добавляла слово sleepy в файл /tmp/test.txt каждые два часа с 18:00 до 22:00, добавьте в файл crontab следующую строку:

* 18-22/2 * * * echo "sleepy" >> /tmp/test.txt

Каждый раз, когда изменяются настройки службы cron для какого-то пользователя, cron создает файл crontab с именем пользователя в каталоге /var/spool/cron. Файл crontab можно редактировать только с помощью команды crontab -e. Либо пользователь может создать файл и выполнить команду crontab _filename_, чтобы импортировать настройки cron в новый файл.

Например, чтобы создать файл crontab для пользователя userexample, выполните следующие действия.

  1. Создайте файл с помощью любого текстового редактора. Добавьте в новый файл команды, которые необходимо выполнять периодически, и интервал их выполнения. В этом примере новый файл — \~/userexample.cron.

  2. Выполните следующую команду от имени пользователя root, чтобы установить новый файл в качестве файла crontab для пользователя userexample:

    # crontab -u userexample ~/userexample.cron
    

После установки нового файла вы найдете файл с именем userexample в каталоге /var/spool/cron. Это и есть требуемый файл crontab.

ПРИМЕЧАНИЕ.
Не перезапускайте cron после изменения файла crontab, потому что после запуска служба cron считывает файл crontab каждую минуту и проверяет наличие команд для периодического выполнения.

Файл /etc/crontab#

Служба cron ежеминутно считывает все файлы в каталоге /var/spool/cron и файл /etc/crontab. Поэтому вы можете использовать cron, настроив файл /etc/crontab. Файл crontab содержит команды для пользователя, тогда как /etc/crontab — команды для всей системы. Ниже приведен пример файла /etc/crontab.

SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root //При возникновении ошибки или выводе данных соответствующие данные отправляются учетной записи по электронной почте.
HOME=/
#  run-parts
01 * * * * root run-parts /etc/cron.hourly //Выполнение скриптов в каталоге /etc/cron.hourly один раз в час.
02 4 * * * root run-parts /etc/cron.daily //Выполнение скриптов в каталоге /etc/cron.daily один раз в день.
22 4 * * 0 root run-parts /etc/cron.weekly //Выполнение скриптов в каталоге /etc/cron.weekly один раз в неделю.
42 4 1 * * root run-parts /etc/cron.monthly //Выполнение скриптов в каталоге /etc/cron.monthly один раз в месяц.

ПРИМЕЧАНИЕ.
Если удалить параметр run-parts, вместо имени каталога используется имя сценария.

Приостановка и возобновление процесса#

Управление заданиями позволяет приостановить или возобновить процесс, и после возобновления процесс продолжит работу с точки приостановки. Чтобы приостановить процесс переднего плана, нажмите клавиши Ctrl+Z. После нажатия Ctrl+Z команда cat приостанавливается вместе с процессом переднего плана, который вы хотите приостановить. Вы также можете вместо этого использовать команду jobs для отображения списка заданий оболочки с их именами, идентификаторами и статусом.

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