Bash Linux + Git: от новичка до уверенного пользователяРабота с процессами и задачамиУправление процессами (jobs, ps, kill, nohup)

Управление процессами (jobs, ps, kill, nohup)

Уроки курсаУправление процессами (jobs, ps, kill, nohup)

Управление процессами (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-сессии, например.