问题描述
例如,当我输入 ping 8.8.8.8 &
时,为什么我们可以看到 ping 进程正常工作?当我输入 find / -name '*test*' &
时,它也会在监视器上看到。
这是为什么?不是真的在后台吗?
最佳答案
&
指示 shell 在后台运行命令,即,它被分叉并在单独的 sub-shell 中作为作业异步运行。
请注意,当您放置 &
时,输出 – stdout 和 stderr – 仍将打印到屏幕上。如果您不想在屏幕上看到任何输出,请通过以下方式将 stdout
和 stderr
重定向到文件:
myscript > ~/myscript.log 2>&1 &
如果您不担心以后分析错误,通常您可能希望通过将 stderr
重定向到 /dev/null
来丢弃 stderr
。
您甚至可以在单独的 sub-shells 中同时运行命令/脚本。例如;
./script1 & ./script2 & ./script3 &
后台作业可以在使用命令完成之前返回到命令行:
fg <job-number>
job-number
可以通过运行获得
jobs
次佳答案
当您使用 &
时,该进程在后台运行。但它的标准输出仍然是终端。
实际上,您可以同时运行 ping 8.8.8.8 &
和 find / -name '*test*' &
(导致混合输出),但您可能不会在同一个 shell 上同时运行 ping 8.8.8.8
和 find / -name '*test*'
。
如果您不想看到任何内容,请使用 ping 8.8.8.8 &> /dev/null &
之类的内容。
此外,您可能想了解 nohup
和 disown
。