Почему этот сценарий bash для apt upgrade фактически не работает в фоновом режиме? [dубликат]

Например, когда я набираю ping 8.8.8.8 &, почему мы можем видеть, что процесс ping работает? И когда я набираю find / -name '*test*' &, он также отображается на мониторе.

Почему? Это действительно не в фоновом режиме?

22
задан 18 August 2015 в 20:59

4 ответа

& направляет оболочку для запуска команды в фоновом режиме, то есть она разветвляется и запускается в отдельной под-оболочке как задание асинхронно.

Обратите внимание, что когда вы помещаете &, вывод - как stdout, так и stderr - все равно будет напечатан на экране. Если вы не хотите видеть какой-либо вывод на экране, перенаправляйте оба файла stdout и stderr в файл:

myscript > ~/myscript.log 2>&1 &

Обычно вы можете отказаться от stderr, перенаправив его на /dev/null, если вас больше не беспокоит анализ ошибок.

Вы также можете запускать команды / сценарии одновременно, в отдельных суб-оболочках. Например:

./script1 & ./script2 & ./script3 &

Фоновая задача может быть возвращена в командную строку до того, как она завершится командой:

fg <job-number>

job-number можно получить, выполнив

jobs
31
ответ дан 18 July 2018 в 08:14

& направляет оболочку для запуска команды в фоновом режиме, то есть она разветвляется и запускается в отдельной под-оболочке как задание асинхронно.

Обратите внимание, что когда вы помещаете &, вывод - как stdout, так и stderr - все равно будет напечатан на экране. Если вы не хотите видеть какой-либо вывод на экране, перенаправляйте оба файла stdout и stderr в файл:

myscript > ~/myscript.log 2>&1 &

Обычно вы можете отказаться от stderr, перенаправив его на /dev/null, если вас больше не беспокоит анализ ошибок.

Вы также можете запускать команды / сценарии одновременно, в отдельных суб-оболочках. Например:

./script1 & ./script2 & ./script3 &

Фоновая задача может быть возвращена в командную строку до того, как она завершится командой:

fg <job-number>

job-number можно получить, выполнив

jobs
32
ответ дан 24 July 2018 в 19:02

Когда вы используете &, процесс работает в фоновом режиме. Но его стандартный вывод все еще является терминалом.

На самом деле вы можете одновременно запускать 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.

8
ответ дан 18 July 2018 в 08:14

Когда вы используете &, процесс работает в фоновом режиме. Но его стандартный вывод все еще является терминалом.

На самом деле вы можете одновременно запускать 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.

8
ответ дан 24 July 2018 в 19:02
  • 1
    disown не препятствует печати вывода на терминал. – Ruslan 18 August 2015 в 14:53
  • 2
    @Ruslan: нет, но он удаляет задание из оболочки. Который может (или не может) быть чем-то, к чему может заинтересовать ОП. – Andrea Corbellini 18 August 2015 в 14:55

Другие вопросы по тегам:

Похожие вопросы: