Эта статья была первоначально опубликована на Everything DevOps.
В операционных системах на базе Linux существует поддержка фоновой и фоновой обработки заданий. Задание в данном контексте — это просто команда, запущенная из окна терминала. Любая запущенная команда — это процесс.
Этот учебник покажет вам, как управлять заданиями на переднем и заднем плане окна терминала Linux. В конце вы узнаете:
- Зачем нужно управлять заданиями
- Как перевести задание на переднем плане в фоновый режим с помощью .
Для начала откройте окно терминала и выполните команду:
$ sleep 10000
Войти в полноэкранный режим Выйти из полноэкранного режимаПосле выполнения приведенной выше команды, она задержит оболочку на 10000 секунд, делая невозможным выполнение любой другой команды до истечения 10000 секунд, как показано на изображении ниже.

Чтобы выполнить описанную выше команду sleep в фоновом режиме, после завершения текущего задания с помощью CTRL + C , выполните команду:
Управление процессами в Linux Перевести процесс в фоновый режим
$ sleep 10000 — это процесс 3647 с номером задания 1 , и в данный момент он выполняется в фоновом режиме.Чтобы увидеть задание, запустите его:
$ jobs
Войти в полноэкранный режим Выйти из полноэкранного режимаПриведенная выше команда покажет все задания в фоновом режиме вашего терминального сеанса и их текущее состояние.

Вывод фонового задания на передний план с помощью команды fg .
В некоторых случаях, после перевода задания в фоновый режим, вы можете захотеть что-то с ним сделать; вот тут-то и приходит на помощь команда fg . Команда fg используется для перемещения фонового задания в текущей оболочке Linux на передний план.
Чтобы вернуть текущее задание на передний план, выполните команду:
$ fg %1
Войти в полноэкранный режим Выйти из полноэкранного режимаРядом с % в приведенной выше команде находится номер задания 1 . После выполнения команды вы увидите, что оно снова находится на переднем плане.

Приостановка задания на переднем плане с помощью CTRL + Z
Допустим, вы хотите приостановить работу на некоторое время, чтобы выполнить другие команды; вы можете сделать это с помощью CTRL + Z . CTRL + Z переводит задание в режим «остановлено» и не завершает его.

Возобновление приостановленного задания на переднем плане с помощью bg .
Чтобы возобновить процесс sleep 10000 , вы можете использовать команду bg . bg возобновит процесс задания и переведет его в фоновый режим.
В командной оболочке выполните:
$ bg %1
Войти в полноэкранный режим Выйти из полноэкранного режима
Значение символов + и — на фоновых рабочих процессах
Если вы заметили на скриншотах символ + рядом с номером задания, то вы также заметили — , и они оба имеют значение, как вы можете видеть в цитате ниже:
Как свернуть программу в консольном Linux? Работаем с процессами в Linux — jobs, fg, bg
В выводе, относящемся к команде jobs), текущее задание всегда помечается + , а предыдущее — — . — Раздел «JOB CONTROL» на странице bash manpage.
Чтобы продемонстрировать приведенную выше цитату, создайте еще два фиктивных задания в фоновом режиме.
$ sleep 10001
Вход в полноэкранный режим Выйти из полноэкранного режимаПосле выполнения вышеуказанных команд выполните команду $ jobs , чтобы увидеть все процессы заданий:

Как видно на изображении выше, последнее из созданных вами заданий отмечено символом + , а предыдущие — — .
До сих пор вы узнали, как переводить задания переднего плана в фоновый режим, возвращать их на передний план, приостанавливать и возобновлять их. Все это помогает вам быть более эффективным, когда у вас есть одно окно терминала для работы.
Далее вы узнаете, как сделать так, чтобы задание выполнялось даже после закрытия окна терминала.
Выполнение заданий даже после закрытия окна терминала
Когда у вас есть задания, выполняемые в фоновом или переднем плане, все задания будут завершены, если вы закроете окно терминала. Задания завершаются потому, что они связаны с этим конкретным сеансом терминала. И при выходе из него всем запущенным процессам посылается сигнал зависания (HUP).
Чтобы проверить это на практике, если предыдущие задания, которые вы создали, все еще выполняются, закройте окно терминала, откройте его снова и запустите команду $ jobs . Вы увидите, что ни один процесс задания не запущен, как показано на рисунке ниже.

Чтобы заставить задания продолжать выполняться даже после закрытия окна терминала, вы можете использовать команды nohup , disown и другие. В данном руководстве используются только команды nohup и disown . Чтобы узнать о других командах, ознакомьтесь с рекомендациями других пользователей Linux на askubuntu.
Когда использовать nohup ? Когда использовать disown ?
Если вы можете заранее предположить, что закроете окно терминала и не хотите повесить запущенные задания, используйте nohup . Если нет, используйте disown , который позволяет отключить процесс от терминальной сессии после того, как она уже была создана.Использование nohup
Чтобы использовать nohup и продолжить выполнение заданий даже после закрытия окна терминала, при создании задания добавьте nohup .Для практической реализации в окне терминала создайте фиктивное задание с nohup :
$ nohup sleep 10000 Linux StackExchange.
Теперь, когда вы закрываете терминал и открываете его снова, вы все еще можете найти запущенное задание sleep 10000 . Но на этот раз не с помощью команды $ jobs , а с помощью команды $ ps -aux | grep sleep , как показано на рисунке ниже.

Второй процесс sleep , который вы видите в выводе терминала выше, был запущен не вами, а командой grep . Чтобы узнать, почему он там находится, посмотрите эти ответы на stackoverflow.
Чтобы завершить работу, выполните команду:
$ pkill sleep
Войти в полноэкранный режим Выйти из полноэкранного режимаПосле выполнения команды вы все еще можете видеть второй процесс, как показано на рисунке ниже:

Использование disown
Поскольку все созданные вами задания «остановлены», чтобы узнать, как использовать disown , создайте новый фиктивный процесс задания:$ sleep 10000 https://procodings.ru/dev-ru/upravlenie-fonovymi-i-fonovymi-protsessami-v-linux/» target=»_blank»]procodings.ru[/mask_link]
Как отправить процессы в фоновый режим в Linux
При использовании любой операционной системы в ней может быть запущено множество процессов. Эти процессы в основном делятся на фоновые и процессы «переднего плана». Как следует из названия, фоновый процесс — это процесс, который тихо работает в фоновом режиме, не требуя вмешательства человека. С другой стороны, процесс переднего плана — это процесс, который мы можем видеть и с которым мы можем постоянно взаимодействовать. Мы можем даже отправить процесс в фоновый режим или вывести его на передний план в соответствии с нашими потребностями, и чтобы узнать, как это сделать, вам нужно прочесть эту статью.
Отправка процесса в фоновый режим в Linux
Для отправки процесса в фоновый режим в Linux вы можете воспользоваться одним из двух описанных ниже методов:
Метод № 1: Использование символа «
Это самый простой метод отправки любого желаемого процесса в фоновый режим в Linux Mint 20. Все, что Вам нужно сделать, это ввести имя нужного процесса в терминале, затем пробел и символ «, а затем нажать клавишу Enter, как показано ниже:
processName processName» на «firefox».

Когда эта команда будет выполнена, процесс Firefox немедленно начнет выполняться в фоновом режиме.
Способ № 2: Использование команды «bg»
Для выполнения этого метода сначала нужно запустить процесс, который вы хотите запустить в фоновом режиме, через терминал следующим образом:
processName
Команды Linux: как работает nohup
При выходе из оболочки системы Linux все запущенные процессы обычно завершаются или зависают. Но что делать, если вы хотите, чтобы процессы работали даже при выходе из оболочки/терминала? В этом вам поможет команда nohup.
Nohup — это сокращение от no hangup. Эта команда поддерживает в системах Linux работу процессов даже после выхода из оболочки или терминала. Она предотвращает получение процессами или заданиями сигнала SIGHUP ( Signal Hang UP ). Это сигнал, который отправляется процессу при закрытии или выходе из терминала. В этом руководстве мы рассмотрим команду nohup и покажем, как ее можно использовать.
Синтаксис команды nohup
Синтаксис команды выглядит следующим образом:
nohup command arguments
Давайте же посмотрим, как работает данная команда.
Проверка версии nohup
Вы можете начать с проверки версии Nohup, используя приведенный ниже синтаксис.

Запуск процесса с помощью Nohup
Если вы хотите, чтобы ваши процессы/задания работали даже после закрытия терминала, укажите необходимую команду в nohup, как показано ниже. Задания будут по-прежнему выполняться и не будут уничтожены при выходе из оболочки или терминала.

Согласно приведенному выше выводу результат команды был сохранен в nohup.out. Чтобы убедиться в этом, запустите:
Кроме того, вы можете перенаправить вывод в другой файл, как показано ниже.
nohup ./hello.sh > output.txt
Чтобы просмотреть этот файл, введите:

Чтобы перенаправить в файл и стандартную ошибку, и вывод, используйте атрибут > filename 2> myoutput.txt >2 в конце команды. В этом примере мы пингуем google.com и отправляем этот процесс в фоновый режим.
nohup ping google.com https://www.8host.com/blog/komandy-linux-kak-rabotaet-nohup/» target=»_blank»]www.8host.com[/mask_link]