Ответы:
&
Направляет оболочку для запуска команды в фоновом режиме, то есть, он раздвоенный и запустить в отдельном субсчете оболочки, как работа, асинхронно.
Обратите внимание, что когда вы выводите &
вывод - и 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
? Может быть, вы хотите уточнить это тоже ... Спасибо.