为什么我可以看到后台进程的输出?

例如,当我键入ping 8.8.8.8 & ,为什么我们可以看到ping进程工作? 当我输入find / -name '*test*' & ,它也可以在监视器上看到。

这是为什么? 它不是真的在后台吗?

&指示shell在后台运行命令,即它被分叉并作为作业异步运行在单独的子shell中。

请注意,当您输出&输出时 – stdout和stderr – 仍将打印在屏幕上 。 如果您不希望在屏幕上看到任何输出,请将stdoutstderr重定向到文件:

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

通常,如果您不担心以后分析错误,可能需要通过将stderr重定向到/dev/null来丢弃它。

您甚至可以在单独的子shell中同时运行命令/脚本。 例如;

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

在完成命令之前,后台作业可以返回到命令行:

 fg  

可以通过运行获得job-number

 jobs 

当您使用& ,该过程在后台运行。 但它的标准输出仍然是终端。

实际上,您可以运行ping 8.8.8.8 &并同时find / -name '*test*' & (导致混合输出),但您可能无法运行ping 8.8.8.8find / -name '*test*'在同一个shell上同时find / -name '*test*'

如果您不想看到任何内容,请使用ping 8.8.8.8 &> /dev/null &


此外,您可能想要了解nohupdisown