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