Por exemplo, quando eu 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 é que? Não é realmente em segundo plano?
Por exemplo, quando eu 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 é que? Não é realmente em segundo plano?
Respostas:
O &
comando 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 deseja ver nenhuma saída na tela, redirecione ambos stdout
e stderr
para um arquivo:
myscript > ~/myscript.log 2>&1 &
Geralmente, você pode descartar o stderr
redirecionando para /dev/null
se não estiver preocupado com a análise de erros posteriormente.
Você também pode executar comandos / scripts ao mesmo tempo, em subcascas separadas. Por exemplo;
./script1 & ./script2 & ./script3 &
Um trabalho em segundo plano pode ser trazido de volta para a linha de comandos antes de terminar com o comando:
fg <job-number>
O job-number
pode ser obtido executando
jobs
2>&1
redireciona stderr
para stdout
.
stty tostop
fará com que os trabalhos em segundo plano sejam suspensos se eles tentarem gravar no terminal.
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 não pode executar ping 8.8.8.8
e find / -name '*test*'
ao mesmo tempo no mesmo shell.
Se você não quiser ver nada, use algo como ping 8.8.8.8 &> /dev/null &
.
Além disso, você pode querer aprender sobre nohup
e disown
.
disown
não impede que a saída seja impressa no terminal.
/dev/null
como um arquivo para redirecionar a saída do terminal se desejar descartar a saída em vez de salvá-la em algum lugar. E estou certo que2>&1
redirecionastderr
parastdout
? Talvez você queira esclarecer isso também ... Obrigado.