В CLI иногда вводимая команда занимает некоторое время, а иногда я знаю, когда это произойдет. Я немного запутался в «фоновом режиме» и тому подобном в Linux.
Как наиболее распространенный (или удобный для пользователя способ) сообщить CLI, что я не хочу ждать, пожалуйста, немедленно верните мне мой запрос. И если бы это могло дать мне индикатор выполнения или просто занятое вращение, это было бы здорово!
command-line
background-process
зеркало
источник
источник
Ответы:
Перед запуском команды вы можете добавить
&
в командную строку для запуска в фоновом режиме:После запуска команды вы можете нажать, CtrlZчтобы приостановить ее, а затем
bg
поместить в фоновый режим:источник
find ...
сначала отладить свою команду, а затем запустить ее в фоновом режиме. В этом случае вы упустили-name
возможность.Это фаворит из всех, поскольку помимо отправки процесса в фоновом режиме, вам не нужно беспокоиться о том, что вывод текста портит ваш терминал:
Это не только запускает процесс в фоновом режиме, но также генерирует журнал (вызывается
nohup.out
в текущем каталоге, если это невозможно, в вашем домашнем каталоге), и если вы закрываете / завершаете работу текущей оболочки, процесс не прерывается, предотвращая получение дочернего процесса родительский сигнал при уничтожении (т. е. выход из системы с помощью SIGHUP для родителя или закрытие текущей оболочки).Есть другие вызываемые,
disown
но это скорее расширение других ответов, а не метод сам по себе:Эти команды не позволяют легко восстановить выходные данные процесса, если вы не используете хакерский способ сделать это.
источник
nohup
в работе контроля оболочки глупо. Современные оболочки не отправляютHUP
в фоновые процессы. Перенаправление на уникальное имя файла - это небольшая цена.command > file.log 2>&1 & disown
немного длиннее,nohup command &
но я думаю, это то, что предлагал @chicks.Это, вероятно, то, что вы хотите
my_command > output.log 2>&1 &
это запустит вашу команду, перенаправив как stdout, так и stderr на некоторые,
output.log
которые вы можете указать. Если вы вообще не хотите хранить вывод - вы можете использовать/dev/null
вместо реального файла.&
выполнит команду в фоновом режиме, чтобы вы могли продолжить ввод команд во время ее работы.2>&1
перенаправляет stderr на stdout, чтобы перехватить весь вывод.Кроме того, когда вы запускаете команду, подобную этой, вы должны получить подтверждение от ядра, похожее на это:
[2] 1234
Это означает, что ваш процесс работает в фоновом режиме и его идентификатор равен1234
, так что вы можете убить его позже, если захотите сkill -9 1234
источник
2>&1
очень важно, потому что команда может потерпеть неудачу и попытаться вывести ошибку в некоторых случаях!Посмотрите на экран или Tmux . Пример с
tmux
:В то время как другие ответы, использующие '&' для фона, будут работать, вы должны перенаправить stdout (и stderr!). Без этого вывод будет идти прямо к вашей оболочке, смешиваясь с любым другим выводом, который у вас может быть.
Фоновая обработка также не будет выполнена, если вы запускаете длинную команду и выходите из системы или отключаетесь. Система убьет вашу работу.
Если вы не знакомы ни с screen, ни с tmux, они в основном позволяют полностью отключиться от вашей оболочки. Вместо фона вашей программы вы создаете фон всей оболочки. Затем вы можете вернуться к нему позже, даже с другого компьютера. Они оба имеют гораздо больше функций, которые вы можете или не можете найти полезными за пределами этого варианта использования.
Screen - старая проверенная и проверенная программа; tmux намного моложе, но извлек уроки из прошлого экрана.
источник
(Для полноты ответа уже ответил :) Вы помещаете команду в фоновом режиме, добавляя
&
после команды:Я добавляю этот ответ для решения другой части вашего вопроса:
Нет реального эквивалента счетчика для отображения текущих фоновых команд, но вы можете увидеть статус фоновых команд, набрав
jobs
илиjobs -l
. Он покажет вам ваши фоновые команды, и будут ли они запущены, остановлены с помощью сигнала (например, с помощью^Z
) или иногда остановлены, потому что они ждут от вас интерактивного ввода.источник
long_command with arguments &> redirection &
перенаправитьstderr
тожеВы можете запустить программу в фоновом режиме, используя
&
. Например, если вы хотите запустить,yum install XyZ
например, вы можете запустить:stdout
Или выход из программы может быть перенаправлен с помощью>
перезаписи файла, или>>
для добавления в файл. Например, если вы хотите войтиyum
в файлyum.log
:Или, если вы хотите добавить вывод в существующий файл
log
:Ошибки печатаются в
stderr
и неstdout
, и могут быть перенаправлены в файл таким же образом, но с использованием2>
:Если вы хотите перенаправить оба
stderr
иstdout
, вы можете использовать&>
:источник
Вы можете запустить команду в фоновом режиме, просто поставив
&
знак после нее.Например:
будет запускать его в фоновом режиме.
Вы можете также перенаправить stdout / stderr на соответствующие файлы, чтобы они не появлялись на вашем терминале, пока вы что-то делаете.
См. Это для получения дополнительной информации: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
источник
Попробуйте использовать команду 'screen' перед тем, как запустить долгосрочное задание, затем, когда вы отсоединяетесь, вы можете снова подключиться к нему с помощью 'screen -r -d' всякий раз, когда вам это понадобится снова. Я обнаружил, что при использовании терминала через ssh или другие сетевые соединения они могут иногда прерываться из-за плохого соединения с сервером. запуск его внутри «экрана» решает эту проблему.
источник