Как выполнять команды Bash в фоновом режиме в Linux

Функция фоновых команд

Нет ничего более раздражающего, чем выполнение команды в терминале, которая работает минуты, а иногда и часы, и вы не можете снова использовать свой терминал. Конечно, вы можете использовать вкладки, но это громоздкое решение, и оно не всегда оптимально, потому что вы можете захотеть видеть обновления во время работы. Здесь мы покажем вам несколько различных способов выполнения команд bash в фоновом режиме в Linux.

Также читайте: Как использовать команду lsof в Linux для отображения открытых файлов

Завершите команду с помощью &

Если вы хотите отправить команду в фон, использование & в конце — это простой способ сделать это. Таким образом, вы можете выполнить команду в фоновом режиме и продолжать использовать свой терминал, пока она работает. Однако есть одно “но”. Использование & не отключает команду от вас; оно просто отправляет ее в фон. Это означает, что, пока вы пытаетесь использовать терминал, все, что команда хочет вывести в STDOUT или STDERR, все равно будет напечатано, что может отвлекать.

Скриншот от 2021 01 14 16 21 23

COMMAND &

Когда сессия терминала закрывается, команда завершается. Вы также можете завершить команду, выполнив команду jobs, найдя номер выполняемой команды и завершив ее с помощью команды kill. Синтаксис выглядит следующим образом:

Скриншот от 2021 01 14 16 21 48

kill %1

Использование & хорошо, если вам нужно временно отложить что-то, но не ожидайте, что оно будет продолжаться вечно.

Также читайте: Как использовать команду dd в Linux

& после команды, затем disown

Запуск команды только с & отправляет ее в фон и продолжает выполнение, пока окно терминала открыто. Если же вы хотите, чтобы эта команда продолжала работать постоянно, даже после завершения вашей сессии терминала, вы можете использовать команду disown.

Чтобы использовать этот метод, начните с добавления &.

COMMAND &

Как упоминалось выше, использование & отправляет эту команду в фон, но не отсоединяет ее от вашего пользователя. Вы можете подтвердить это, введя jobs в терминале. Это покажет команду, работающую в фоновом режиме, как мы видели ранее.

Просто введите disown в оболочку, и она сделает именно это. (И вы снова можете подтвердить это с помощью команды jobs.)

Скриншот от 2021 01 14 16 26 01

Теперь вы можете закрыть свой терминал и продолжать свой день. Он все равно будет продолжать выводить данные в STDOUT или STDERR, но как только вы выйдете и снова откроете свой терминал, вы ничего не увидите. Вы можете снова найти команду с помощью команд top или ps и завершить ее с помощью команды kill.

Скриншот от 2021 01 14 16 28 42

Также читайте: Как использовать команду Rm в Linux

& после команды с /dev/null

Добавление & после команды отправит команду в фон, но в результате фоновая команда продолжит выводить сообщения в терминал, пока вы его используете. Если вы хотите предотвратить это, рассмотрите возможность перенаправления команды в /dev/null.

Скриншот от 2021 01 14 16 31 33

COMMAND &>/dev/null &

Это не предотвращает закрытие команды, когда терминал закрывается. Однако, как упоминалось выше, можно использовать disown, чтобы отсоединить выполняемую команду от пользователя. Вы также можете завершить ее любым из методов, упомянутых выше, если не хотите, чтобы она продолжала работать.

Также читайте: Полное руководство по командам Apt и Apt-Get

Nohup, с & и /dev/null

В отличие от предыдущих команд, использование nohup позволяет вам выполнять команду в фоновом режиме и поддерживать ее выполнение. Как? nohup игнорирует сигнал HUP (сигнал отключения), что позволяет выполнять команды в фоновом режиме даже когда терминал выключен. Скомбинируйте эту команду с перенаправлением в “ /dev/null “ (чтобы предотвратить создание файла nohup.out), и все отправляется в фон одной командой.

nohup COMMAND &>/dev/null &

Скриншот от 2021 01 14 16 32 43

Также читайте: Как генерировать SSL-сертификаты в Linux с помощью OpenSSL

Большинство терминальных программ в Linux сегодня имеют встроенные функции, позволяющие им работать в фоновом режиме с минимальными усилиями. Кроме того, современные системы инициализации (такие как systemd) могут позволить пользователям запускать программы как службы при загрузке или в любое время.

Тем не менее, некоторые программы в Linux не имеют возможности работать как демоны или интегрироваться с современными системами инициализации. Это действительно неудобство, но это понятно, так как не все разработчики имеют навыки или время для добавления новых функций.

К счастью, такие команды, как nohup или disown, все еще реальны и могут закрыть разрыв в перемещении таких программ в фон. Они не идеальны и не шикарны, но они выполняют свою работу, когда это необходимо.

Если вам понравилась эта статья о Linux, обязательно ознакомьтесь с другими нашими материалами о Linux, такими как как подключить свою учетную запись Google к GNOME Shell, лучшие дистрибутивы Linux для пользователей Windows и команды LS, которые вам нужно знать.

Также читайте: Как использовать cURL для передачи данных через командную строку и многое другое