Урок курса
Управление процессами (jobs, ps, kill, nohup)
Bash Linux + Git: от новичка до уверенного пользователяУправление процессами (jobs, ps, kill, nohup)
Когда ты запускаешь команду в терминале, она становится процессом – программой, выполняющейся в памяти. Уметь управлять процессами важно: иногда нужно запустить что-то в фоновом режиме, остановить зависшую программу или посмотреть, что вообще сейчас работает.
-
Фоновые задачи и jobs: Если после команды поставить
&, она запустится в фоновом режиме (background). Например,long_task &– теперь терминал не будет ждать окончанияlong_task, а вернёт тебе управление сразу. Запущенная таким образом задача называется job. Командойjobsможно просмотреть список фоновых задач, запущенных в текущей сессии терминала (они будут пронумерованы как [1], [2], ...). Чтобы вернуть фоновый процесс на передний план (то есть снова начать с ним взаимодействовать напрямую), используйfg %номер_задачи(если задача одна, можно простоfg). А чтобы, наоборот, отправить активный процесс в фон, нажми Ctrl+Z (это поставит его на паузу), а потом введиbg– процесс продолжит выполняться, но уже в фоне. -
ps: Эта команда выводит список процессов. Просто
psпокажет процессы, связанные с твоим текущим терминалом. Аps aux(в BSD-стиле) илиps -ef(в UNIX-стиле) выведет список всех процессов в системе со множеством деталей: PID (идентификатор процесса), пользователь, процент использования памяти/CPU, и команду, которая запущена. Обычно этот список длинный, поэтому частоpsкомбинируют с grep, чтобы найти конкретный процесс: например,ps aux | grep firefoxвыведет все процессы, связанные с Firefox. -
kill: Несмотря на грозное название, команда
killне обязательно "убивает" процесс моментально (хотя может и это).killотправляет сигнал процессу по его PID. По умолчанию это сигнал TERM (вежливая просьба завершиться). Узнав PID нужного процесса (из вывода ps или черезjobs -lдля фоновых), выполняемkill PID. Большинство программ поймёт сигнал TERM и корректно завершится. Если же процесс не реагирует (завис намертво), прибегают кkill -9 PID, посылая сигнал KILL – безусловное завершение процесса системой. Сигнал-9сравнивают с "ликвидацией без предупреждения". Внимание: используя kill, всегда старайся отправлять обычный сигнал (без-9) сначала, чтобы дать программе шанс закрыть файлы и освободить ресурсы. -
nohup: Если тебе нужно запустить длительный процесс, который должен пережить закрытие терминала или выход из системы, используй
nohup(no hangup). Командаnohup myscript.sh &запустит скрипт в фоне, игнорируя сигнал SIGHUP (который посылается процессам при закрытии терминала). Вывод программы по умолчанию попадёт в файлnohup.out(раз уж консоли для вывода нет). Это удобно для запуска задач на сервере перед выходом из SSH-сессии, например.
Разбор команды ps
Что такое ps?
ps (от англ. process status) — это команда, используемая для получения снимка состояния запущенных процессов в системе. Она выводит список процессов, их идентификаторы, информацию о владельцах, используемых ресурсах (CPU, память) и другие детали. Команда ps незаменима при мониторинге, отладке и управлении процессами в Unix-подобных системах.
Основной синтаксис
ps [опции]
- Если опции не указаны, ps выводит информацию о процессах, связанных с текущей сессией терминала.
- Команда ps позволяет выбирать различные форматы вывода, чтобы отобразить нужные столбцы информации.
Распространённые опции
Опции в стиле System V
ps -ef
Выводит все процессы в системе в «полном» формате:- UID – имя пользователя, запустившего процесс.
- PID – идентификатор процесса.
- PPID – идентификатор родительского процесса.
- C – использование CPU.
- STIME – время запуска процесса.
- TTY – терминал, связанный с процессом.
- TIME – общее процессорное время.
- CMD – команда, запустившая процесс.
Опции в стиле BSD
ps aux
Выводит все процессы, независимо от их управляющего терминала, с подробной информацией:- USER – имя пользователя.
- PID – идентификатор процесса.
- %CPU – процент использования CPU.
- %MEM – процент использования памяти.
- VSZ – виртуальный размер процесса (в КБ).
- RSS – резидентный размер (физическая память).
- TTY – терминал (если есть).
- STAT – состояние процесса.
- START – время запуска.
- TIME – общее процессорное время.
- COMMAND – команда, запустившая процесс.
Другие полезные опции
-eили-A
Выводит все процессы в системе.-u username
Показывает процессы, запущенные от имени указанного пользователя.-x
Выводит процессы, не связанные с управляющим терминалом.-o
Позволяет задать пользовательский формат вывода, выбирая конкретные столбцы.
Примеры использования
Пример 1: Вывод всех процессов в системе
ps -e
Выведет список всех запущенных процессов.
Пример 2: Полный список процессов в стиле System V
ps -ef
Выведет подробную информацию обо всех процессах, включая UID, PID, PPID, время запуска и команду.
Пример 3: Вывод процессов в стиле BSD
ps aux
Выведет все процессы с информацией о пользователе, процентном использовании CPU и памяти, размере процессов, состоянии и т.д.
Пример 4: Фильтрация по пользователю
ps -u root
Покажет только процессы, запущенные от имени пользователя root.
Пример 5: Поиск процесса с использованием grep
ps aux | grep apache
Выведет все процессы, связанные с Apache, что удобно для мониторинга и отладки.
Полезные советы
-
Снимок состояния:
ps показывает состояние процессов в момент выполнения команды. Для динамического мониторинга используйте утилиты типаtopилиhtop. -
Комбинирование с grep:
Используйте конвейеры, чтобы фильтровать вывод. Например,ps -ef | grep sshпоможет найти все процессы, связанные с SSH. -
Пользовательский формат:
С опцией-oможно настроить вывод так, чтобы отображались только нужные столбцы, что упрощает анализ информации.
Разбор команды kill
Что такое kill?
kill — это команда, которая отправляет сигналы процессам, идентифицируемым по их PID (Process ID). Хотя название "kill" ассоциируется с прекращением работы процесса, команда может отправлять и другие сигналы, позволяющие, например, корректно завершить процесс, приостановить его выполнение, обновить настройки или выполнить другие действия.
Основной синтаксис
kill [опции] PID...
- PID — идентификатор процесса (или процессов), которым отправляется сигнал.
- Если указывается несколько PID, kill отправит сигнал каждому из них.
Основные сигналы
-
SIGTERM (15):
Стандартный сигнал завершения, который вежливо просит процесс завершиться. Это сигнал по умолчанию.kill 1234 # Отправляет SIGTERM процессу с PID 1234
-
SIGKILL (9):
Безусловное завершение процесса, которое не позволяет процессу выполнить очистку или сохранить данные. Этот сигнал используется, когда процесс не отвечает на SIGTERM.kill -9 1234
-
SIGHUP (1):
Часто используется для перезагрузки процесса, чтобы он перечитал конфигурационные файлы.kill -1 1234
-
SIGSTOP, SIGCONT:
Позволяют приостанавливать и возобновлять выполнение процесса.kill -STOP 1234 # Приостанавливает процесс kill -CONT 1234 # Возобновляет процесс
Основные опции
-
-s сигнал или --signal сигнал:
Позволяет явно указать отправляемый сигнал, например,kill -s SIGKILL 1234. -
-l:
Показывает список доступных сигналов.kill -l
-
-q:
Некоторые реализации поддерживают тихий режим, но это менее распространённо.
Примеры использования
Пример 1: Отправка сигнала SIGTERM (по умолчанию)
kill 1234
Эта команда отправляет сигнал SIGTERM процессу с PID 1234, предлагая ему завершиться корректно.
Пример 2: Принудительное завершение процесса с помощью SIGKILL
kill -9 1234
Если процесс не реагирует на SIGTERM, можно использовать SIGKILL для немедленного прекращения его работы.
Пример 3: Отправка сигнала SIGHUP для перезагрузки процесса
kill -1 1234
Это часто используется для перезагрузки процессов, чтобы они перечитали свои конфигурационные файлы.
Пример 4: Приостановка и возобновление процесса
kill -STOP 1234 # Приостановка процесса kill -CONT 1234 # Возобновление процесса
Полезные советы
-
Используйте SIGTERM по умолчанию:
Прежде чем применять SIGKILL, рекомендуется сначала отправить SIGTERM, чтобы дать процессу шанс корректно завершиться. -
Будьте осторожны с привилегиями:
Для отправки сигналов процессам, запущенным другим пользователем, обычно требуются права суперпользователя (root). -
Проверка PID:
Убедитесь, что вы отправляете сигнал нужному процессу, используя команды типаps,pgrepилиtop. -
Список сигналов:
Командаkill -lпокажет все доступные сигналы и их номера, что полезно для быстрого справочника.
Разбор команды nohup
Что такое nohup?
nohup (от англ. no hangup) — это команда, которая позволяет запускать другую команду таким образом, чтобы она игнорировала сигнал HUP (hangup). Этот сигнал обычно посылается процессам при закрытии терминала или разрыве SSH-сессии. Использование nohup гарантирует, что запущенный процесс продолжит работу, даже если вы выйдете из системы.
Основной синтаксис
nohup команда [аргументы] [> вывод_файла 2>&1] &
- команда [аргументы] — команда, которую вы хотите выполнить с nohup.
- > вывод_файла 2>&1 — перенаправление стандартного вывода и стандартного потока ошибок в указанный файл (если не указано, вывод по умолчанию будет записываться в файл
nohup.out). - & — амперсанд позволяет запустить команду в фоне, возвращая управление терминалом.
Примеры использования
Пример 1: Запуск скрипта в фоне
nohup ./myscript.sh > myscript.log 2>&1 &
- Что происходит:
Скриптmyscript.shзапускается в фоне, и все его вывод (как стандартный, так и ошибки) записывается в файлmyscript.log. Даже если вы закроете терминал, скрипт продолжит работать.
Пример 2: Запуск длительной команды
nohup python long_running_script.py &
- Что происходит:
Длительный Python-скрипт запускается в фоне. Если не указать перенаправление вывода, стандартный вывод и ошибки будут записаны в файлnohup.out.
Пример 3: Просмотр файла nohup.out
Если вы не указали свой файл для вывода, можно посмотреть содержимое файла nohup.out:
less nohup.out
Полезные советы
-
Перенаправление вывода:
Рекомендуется явно перенаправлять стандартный вывод и ошибки, чтобы отслеживать логи запускаемой команды. Пример:nohup some_command > output.log 2>&1 & -
Фоновые процессы:
Запуск команд с nohup часто сочетается с символом&, чтобы процесс выполнялся в фоне, освобождая терминал для других задач. -
Проверка процессов:
Используйте команды типаps,pgrepилиjobsдля отслеживания запущенных процессов, если вы хотите убедиться, что процесс продолжает работать. -
nohup.out:
Если вывод не перенаправлен, по умолчанию он записывается в файлnohup.outв текущей директории. Убедитесь, что у вас есть права на запись в эту директорию.
Продолжить с сохранением прогресса
Перейдите к уроку в учебном кабинете.
