Нет ничего более раздражающего, чем запустить команду в своем терминале и заставить ее работать в течение минут, а иногда и часов, и не иметь возможности снова использовать свой терминал. Конечно, вы можете использовать вкладки, но это неуклюжее решение, и оно не всегда оптимально, потому что вы можете хотеть видеть обновления во время работы. Здесь мы покажем вам несколько различных способов запуска команд bash в фоновом режиме в Linux.
Завершите команду с помощью &
Если вы хотите поместить команду в фоновый режим, используйте & (амперсанд) в конце простой способ сделать это. Таким образом, вы можете выполнить команду в фоновом режиме и продолжать использовать свой терминал во время его работы. Однако у этого есть уловка. Использование &не отключает команду от вас; он просто отодвигает его на задний план. Это означает, что пока вы пытаетесь использовать терминал, все, что команда хочет отправить STDOUT или STDERR все еще будет напечатано, что может отвлекать.
COMMAND &
Когда сеанс терминала закрывается, команда завершается. Вы также можете убить команду jobs
, выполнив команду, найдя номер выполняющейся команды и завершив ее с помощью killкоманды. Этот синтаксис выглядит следующим образом:
kill %1
Использование & хорошо, если вам нужно немного оттолкнуть что-то, но не ожидайте, что это будет продолжаться вечно.
& После команды, затем отклонить ее
Выполнение команды с помощью просто & отодвигает ее на задний план и поддерживает ее выполнение, пока открыто окно терминала. Однако, если вы хотите, чтобы эта команда работала постоянно, даже после завершения сеанса терминала, вы можете использовать эту команду disown
.
Чтобы использовать этот метод, начните с добавления &.
COMMAND &
Как упоминалось выше, использование &этой команды переводит эту команду в фоновый режим, но не отключает ее от пользователя. Вы можете проверить это, набрав jobs в терминале. Он покажет, как команда работает в фоновом режиме, как мы видели раньше.
Просто введите disown
в оболочку, и она сделает именно это. (И вы можете еще раз проверить это с помощью команды jobs
.)
Теперь вы можете закрыть свой терминал и продолжить свой день. Он по-прежнему будет связывать вещи с STDOUT или STDERR, но как только вы выйдете и снова откроете свой терминал, вы ничего там не увидите. Вы можете снова найти команду с помощью команд top
или ps
и убить ее с помощью команды kill
.
& После команды с /dev/null
Добавление & после команды переместит команду в фоновый режим, но в результате фоновая команда продолжит выводить сообщения в терминал по мере того, как вы его используете. Если вы хотите предотвратить это, подумайте о перенаправлении команды на /dev/null.
COMMAND &>/dev/null &
Это не мешает команде закрыться при закрытии терминала. Однако, как упоминалось выше, можно использовать, disown чтобы отключить запущенную команду от пользователя. Вы также можете убить его любым из методов, упомянутых выше, если вы больше не хотите, чтобы он запускался.
Nohup, с & и /dev/null
В отличие от предыдущих команд, использование nohup
позволяет запускать команду в фоновом режиме и продолжать ее выполнение. Как? nohup
обходит сигнал HUP (сигнал зависания), что позволяет запускать команды в фоновом режиме, даже когда терминал выключен. Объедините эту команду с перенаправлением на «/dev/null» (чтобы nohup не создавал файл nohup.out), и все перейдет в фон с помощью одной команды.
nohup COMMAND &>/dev/null &
Большинство терминальных программ в Linux сегодня имеют встроенные функции, позволяющие им работать в фоновом режиме без особых усилий. Наряду с этим современные системы инициализации (например, systemd) могут позволять пользователям запускать такие программы, как службы, при загрузке или в любое время.
Тем не менее, некоторые программы в Linux не могут работать как демон или интегрироваться с современными системами инициализации. Это реальное неудобство, но его можно понять, поскольку не у всех разработчиков есть навыки или время для добавления новых функций.
К счастью, такие команды, как nohup или disown, все еще существуют и могут закрыть пробел в перемещении подобных программ на задний план. Они не идеальны или необычны, но они выполняют свою работу, когда это необходимо.