Почему я могу видеть результаты фоновых процессов?

19

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

Почему? Разве это не действительно в фоновом режиме?

    
задан NoFence 18.08.2015 в 08:23
источник

2 ответа

30

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

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

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

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

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

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

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

fg <job-number>

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

jobs
    
ответ дан Ron 18.08.2015 в 08:33
источник
8

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

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

    
ответ дан Andrea Corbellini 18.08.2015 в 08:33