Как запускать команды Bash в фоновом режиме в Linux

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

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

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

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

Скриншот с 2021 года 01 14 16 21 23

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

Скриншот с 2021 года 01 14 16 21 48

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

& После команды, затем отклонить ее

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

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

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

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

Скриншот с 2021 года 01 14 16 26 01
You can just make out the disown command in there

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

Скриншот с 2021 года 01 14 16 28 42
Отказанное задание - второе, с PID 16238.

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

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

Скриншот с 2021 года 01 14 16 31 33

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

Nohup, с & и / dev / null

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

Скриншот с 2021 года 01 14 16 32 43

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

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

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

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

По теме: