当前位置: 首页>>技术教程>>正文


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

问题描述

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

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

最佳答案

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

请注意,当您放置 & 时,输出 – stdout 和 stderr – 仍将打印到屏幕上。如果您不想在屏幕上看到任何输出,请通过以下方式将 stdoutstderr 重定向到文件:

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.8find / -name '*test*'

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


此外,您可能想了解 nohupdisown

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12859.html,未经允许,请勿转载。