为什么我可以看到后台进程的输出?
例如,当我键入ping 8.8.8.8 &
,为什么我们可以看到ping进程工作? 当我输入find / -name '*test*' &
,它也可以在监视器上看到。
这是为什么? 它不是真的在后台吗?
&
指示shell在后台运行命令,即它被分叉并作为作业异步运行在单独的子shell中。
请注意,当您输出&
输出时 – stdout和stderr – 仍将打印在屏幕上 。 如果您不希望在屏幕上看到任何输出,请将stdout
和stderr
重定向到文件:
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.8
并find / -name '*test*'
在同一个shell上同时find / -name '*test*'
。
如果您不想看到任何内容,请使用ping 8.8.8.8 &> /dev/null &
。
此外,您可能想要了解nohup
和disown
。