當前位置: 首頁>>技術教程>>正文


為什麽我可以看到後台進程的輸出?

問題描述

例如,當我輸入 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/zh-tw/article/12859.html,未經允許,請勿轉載。