Por que posso ver a saída de processos em segundo plano?

21

Por exemplo, quando digito ping 8.8.8.8 & , por que podemos ver o processo de ping funcionando? E quando eu digito find / -name '*test*' & , também é visto no monitor.

Por que isso? Não está realmente no fundo?

    
por NoFence 18.08.2015 / 10:23

2 respostas

34

O & direciona o shell para executar o comando em segundo plano, ou seja, ele é bifurcado e executado em um sub-shell separado, como um trabalho, de forma assíncrona.

Observe que quando você coloca & , a saída - stdout e stderr - ainda será impressa na tela . Se você não quiser ver nenhuma saída na tela, redirecione os arquivos stdout e stderr para um arquivo por:

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

Normalmente você pode querer descartar o stderr redirecionando-o para /dev/null se você não estiver preocupado em analisar os erros mais tarde.

Você também pode executar comandos / scripts ao mesmo tempo, em sub-shells separados. Por exemplo,

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

Um trabalho em segundo plano pode ser trazido de volta à linha de comando antes de terminar com o comando:

fg <job-number>

O job-number pode ser obtido executando

jobs
    
por Ron 18.08.2015 / 10:33
8

Quando você usa & , o processo está sendo executado em segundo plano. Mas sua saída padrão ainda é o terminal.

De fato, você pode executar ping 8.8.8.8 & e find / -name '*test*' & ao mesmo tempo (resultando em uma saída mista), mas você não pode executar ping 8.8.8.8 e find / -name '*test*' ao mesmo tempo no mesmo shell. / p>

Se você não quiser ver nada, use algo como ping 8.8.8.8 &> /dev/null & .

Além disso, talvez você queira aprender sobre nohup e disown .

    
por Andrea Corbellini 18.08.2015 / 10:33