Управление процессами
Операционная система (ОС) управляет множеством пользовательских запросов и задач. В большинстве случаев ОС поставляется только с одним ЦП и одной основной памятью, но может иметь несколько дисков уровня 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:
-
-e— отображает все процессы. -
-f— полный формат вывода. -
`-h — скрывает заголовки столбцов в информации о процессах.
-
-l— длинный формат вывода. -
-w— широкий формат вывода. -
-a— перечисляет все процессы на терминале, включая процессы других пользователей. -
-r— перечисляет только работающие процессы. -
-x— перечисляет все процессы без терминалов управления.
Например, чтобы вывести список всех процессов на терминале, выполните команду.
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 обеспечивает отображение состояния системного процессора в реальном времени.
Вы можете отсортировать список задач ЦП по загрузке ЦП, использованию памяти или времени выполнения задачи.
Дополнительные возможности настройки отображения, такие как выбор столбцов или метода сортировки, доступны с помощью интерактивных команд или файла настройки.
Пример вывода команды top:
top - 19:04:08 up 9 days, 3:09, 8 users, load average: 2.17, 2.08, 2.06
Tasks: 242 total, 8 running, 234 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.3%us, 0.2%sy, 0.0%ni, 91.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 19983M total, 19777M used, 206M free, 567M buffers
Swap: 2053M total, 10M used, 2043M free, 12326M cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32757 root 20 0 4462m 3.0g 5440 S 100 15.3 1542:40 qemu-kvm
32461 root 20 0 11580 1380 1120 R 100 0.0 1563:47 sh
31437 root 20 0 4626m 2.4g 5436 R 4 12.1 14:36.89 qemu-kvm
29553 root 20 0 17256 1392 932 R 0 0.0 0:00.02 top
31438 root 20 0 0 0 0 S 0 0.0 0:12.80 vhost-31437
32758 root 20 0 0 0 0 S 0 0.0 0:25.21 vhost-32757
1 root 20 0 10540 796 748 S 0 0.0 0:04.59 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:01.64 ksoftirqd/0
6 root RT 0 0 0 0 S 0 0.0 0:01.08 migration/0
Команда 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
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...]
Формат времени
Запланированное время может быть в любом из следующих форматов.
-
чч:мм: есличч:ммпредшествуют текущему времени, то выбранные команды будут выполнены вчч:ммна следующий день. -
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
Описание параметров:
-
minute— минута часа, в которую будут выполняться команды. Диапазон значений: 0–59. -
hour— час дня, в который будут выполняться запланированные команды. Диапазон значений: 0–23. -
day-of-month— день месяца, в который будут выполняться запланированные команды. Диапазон значений: 1–31. -
month-of-year— месяц года, в котором будут выполняться запланированные команды. Диапазон значений: 1–12. -
day-of-week— день недели, в который будут выполняться запланированные команды. Диапазон значений: 0–6. -
commands— запланированные команды.
Пропускать какие-либо поля недопустимо. Помимо числовых значений, допускаются специальные знаки:
-
звездочка
*обозначает подстановочное значение; -
косая черта
/служит для указания за ней числового значения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, выполните следующие действия.
-
Создайте файл с помощью любого текстового редактора.
-
Добавьте в новый файл команды, которые необходимо выполнять периодически, и интервал их выполнения. В этом примере новый файл —
~/userexample.cron. -
Выполните следующую команду от имени пользователя
root, чтобы установить новый файл в качестве файлаcrontabдля пользователяuserexample:crontab -u userexample ~/userexample.cron
После установки нового файла вы найдете файл с именем userexample в каталоге /var/spool/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.
Затем процесс начинается с того места, где он был ранее приостановлен.