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