При работе в Linux вы запускаете одну команду за другой. Например, вы редактируете файл конфигурации с помощью редакторов nano или vim или загружаете файлы с помощью команды wget, а затем вдруг решаете взглянуть на другие файлы или выполнить ещё одну команду.
В этом случае у вас есть два варианта. Во-первых, закройте файл конфигурации или отмените копирование файлов, но это может отнять у вас время и силы, если вы находитесь в процессе копирования. Другой вариант — перевести этот процесс в фоновый режим или, другими словами, приостановить его на некоторое время и возобновить позже.
Приостановка процесса в Linux
В Linux вы можете использовать сочетание клавиш CTRL+Z для приостановки выполнения любой команды в фоновом режиме. Это работает в Ubuntu и других дистрибутивах Linux.
Затем вы можете продолжить выполнение другой важной задачи, а когда закончите, сможете возобновить приостановленную команду.
Рассмотрим ситуацию: мы редактируем текстовый файл в Nano и вдруг хочу приостановить редактирование. Для этого мы используем сочетание клавиш CTRL+Z.
Вы можете перевести множество процессов в фоновый режим в зависимости от объёма системной памяти, а когда закончите, сможете найти их с помощью команды ps или jobs и возобновить позже.
Список приостановленных процессов в Linux
Чтобы вывести список всех приостановленных процессов, работающих в фоновом режиме, можно использовать две разные команды: ps и jobs (рекомендуется).
В чём разница между командами ps и jobs?
Команда ps — перечислите все запущенные процессы в вашей системе. В то время как в jobs команде отображается только процесс suspend, приостановленный с помощью CTRL+Z сочетания клавиш в вашей системе Linux.
Давайте выведем список всех приостановленных процессов с помощью команды ps в Linux.
ps
Если присмотреться, то можно заметить ещё два процесса, работающих в фоновом режиме и перечисленных в списке. Процесс bash относится к текущей запущенной оболочке bash в вашем терминале, а процесс ps используется для вывода списка всех этих процессов.
Теперь давайте воспользуемся командой jobs (рекомендуется) для вывода списка всех приостановленных процессов в фоновом режиме.
jobs
В этом случае вы можете четко видеть только приостановленный процесс, указанный командой jobs.
Возобновить приостановленный процесс.
Как только вы закончите свою важную работу, вы можете возобновить приостановленный процесс с помощью команды fg.
Если вы выполните команду fg без идентификатора процесса, она возобновит последний процесс, работающий в данный момент в фоновом режиме.
Например, если в фоновом режиме выполняются два или три разных процесса, команда fg сама по себе возобновит недавно приостановленный процесс в фоновом режиме с помощью символа (+), как показано ниже.
fg
Выше вы можете увидеть символ (+) вместе с идентификатором процесса при выполнении команды. В моём случае nano file.txt сопровождается символом (+). Таким образом, это будет первый процесс, который возобновится с помощью команды fg .
Вы можете возобновить любой конкретный процесс вместо недавно приостановленного. В этом случае вам нужно указать идентификатор этого конкретного процесса вместе с командой fg для его возобновления на переднем плане.
fg <идентификатор приостановленного процесса>
Замените <suspended-process-id> на идентификатор приостановленного процесса, который вы хотите возобновить. В моем случае я заменю <suspended-process-id> на 2, чтобы возобновить команду ping.
Будет ли это работать после перезагрузки системы?
Нет, они не сохраняются после перезагрузки. Приостановленный процесс закрывается после перезагрузки всей системы из-за изменения PID. В таких случаях вместо приостановки каждого процесса переводите всю систему в режим гибернации.
Поддерживать приостановленные процессы в фоновом режиме
Команда bg полезна, если вы хотите, чтобы процесс продолжал работать в фоновом режиме и не зависал.
В чём разница между bg и fg в Linux?
Команда fg переводит недавно приостановленный процесс из фонового режима в активный, в то время как команда bg оставляет процесс в фоновом режиме.
Ниже мы запустили команду sleep 500 и приостановил её с помощью сочетания клавиш CTRL+Z, которое заморозило процесс. Затем я снова использовал команду bg для перезапуска приостановленного процесса в фоновом режиме.
jobs sleep 500 jobs bg $1 jobs
Если у вас несколько приостановленных процессов, укажите конкретный идентификатор процесса с помощью %, чтобы он продолжал работать в фоновом режиме.
Остановить приостановленный процесс
Если вам больше не нужен приостановленный процесс, вы можете напрямую остановить его, указав его PID в фоновом режиме с помощью команды kill.
Для этого сначала нужно узнать PID приостановленного процесса с помощью команды ps . Затем укажите этот PID в команде kill , чтобы остановить процесс.
ps kill -9 <идентификатор-процесса>
Замените <process-id> на процесс, который вы хотите завершить или остановить. В моём случае я хочу остановить фоновый процесс top, поэтому я заменю <process-id> на PID top процесса.
Вместо указания конкретного процесса вы можете использовать приведённую ниже команду, если хотите остановить или завершить все приостановленные процессы одновременно.
kill -9 $(jobs -p)
Выводы
Мы часто приостанавливаем свои процессы и запускаю их в фоновом режиме, когда не нужно уделять им внимание. Это включает в себя получение больших файлов с помощью команды wget, загрузку проектов с помощью git clone или распаковку сжатых файлов.