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