Ответы:
&Направляет оболочку для запуска команды в фоновом режиме, то есть, он раздвоенный и запустить в отдельном субсчете оболочки, как работа, асинхронно.
Обратите внимание, что когда вы выводите &вывод - и stdout, и stderr - все равно будут выводиться на экран . Если вы не хотите видеть какие-либо выходные данные на экране, перенаправьте оба stdoutи stderrв файл с помощью:
myscript > ~/myscript.log 2>&1 &
Обычно вы можете отказаться stderrот перенаправления, /dev/nullесли вы не беспокоитесь об анализе ошибок позже.
Вы также можете запускать команды / сценарии одновременно, в отдельных вложенных оболочках. Например,
./script1 & ./script2 & ./script3 &
Фоновое задание можно вернуть в командную строку, прежде чем оно завершится командой:
fg <job-number>
job-numberМожно получить, выполнив
jobs
2>&1перенаправляет stderrна stdout.
stty tostopфоновые задания будут приостановлены, если они попытаются выполнить запись в терминал.
Когда вы используете &, процесс работает в фоновом режиме. Но его стандартный вывод - все еще терминал.
На самом деле, вы можете запускать ping 8.8.8.8 &и find / -name '*test*' &в одно и то же время (что приводит к смешанному выводу), но вы не можете запускать ping 8.8.8.8и find / -name '*test*'в одно и то же время в одной и той же оболочке.
Если вы не хотите ничего видеть, используйте что-то вроде ping 8.8.8.8 &> /dev/null &.
Кроме того, вы можете узнать о nohupи disown.
disownне препятствует выводу вывода на терминал.
/dev/nullв качестве файла для перенаправления вывода терминала, если хотите отбросить вывод вместо его сохранения где-либо. И я прав, что2>&1перенаправляетstderrнаstdout? Может быть, вы хотите уточнить это тоже ... Спасибо.