簡體   English   中英

linux 命令末尾的“&”是什么意思?

[英]What does "&" at the end of a linux command mean?

我是一名系統管理員,我被要求運行一個 linux 腳本來清理系統。

命令是這樣的:

perl script.pl > output.log &

所以這個命令以&結尾,有什么特殊意義嗎?

我有 shell 的基本知識,但我以前從未見過這個。

&使命令在后台運行。

man bash

如果命令由控制運算符&終止,shell 將在子 shell 的后台執行該命令。 shell 不等待命令完成,返回狀態為 0。

當沒有被告知時,命令會接管前台。 您只有一個“前台”進程在單個 shell 會話中運行。 & 符號指示命令在后台進程中運行,並立即返回命令行以獲取其他命令。

sh my_script.sh &

在 shell 會話關閉后,后台進程將不會保持活動狀態。 SIGHUP終止所有正在運行的進程。 反正默認。 如果您的命令長時間運行或無限期運行(即:微服務),您需要使用 nohup 對其進行 pr-pend,以便在您與會話斷開連接后仍保持運行:

nohup sh my_script.sh &

編輯:當使用 & 時,后台進程的關閉似乎存在灰色區域。 請注意,shell可能會根據您的操作系統和本地配置(特別是在 CENTOS/RHEL 上)關閉您的進程: https ://serverfault.com/a/117157。

此外,您可以使用“&”符號通過一 (1) 個 ssh 連接運行多個進程,以保持最少數量的終端。 例如,我有一個進程偵聽消息以提取文件,第二個進程偵聽消息以上傳文件:使用“&”我可以在一個終端中運行這兩個服務,通過單個 ssh 連接到我的服務器.


*****我剛剛意識到,在 ssh 會話關閉后,通過“&”運行的這些進程也將“保持活動狀態”! 如果您與服務器的連接中斷,則非常簡潔和有用**

我不確定,但我現在正在讀一本書,我得到的是一個程序需要處理它的信號(就像我按下CTRL-C )。 現在程序可以使用SIG_IGN忽略所有信號或使用SIG_DFL恢復默認操作。

現在,如果你執行$ command &那么這個作為后台進程運行的進程會忽略所有將發生的信號。 對於前台進程,這些信號不會被忽略。

如果您有一個命令執行並且不會快速返回狀態 0(提示控制)。

例如:

  1. 命令gedit啟動默認編輯器gedit UI。

  2. 命令eclipse啟動 eclipse IDE。

此類命令會不斷在終端中拋出活動日志,並且不會返回命令提示符。

問題是,如何在后台運行這些命令,以便我們返回命令終端,我們可以使用終端執行其他任務。

答案是:通過在這樣的命令之后附加&

 user@mymachine:~$ <command> &

例子:

user@mymachine:~$ <command> gedit &
user@mymachine:~$ <command> eclipse &

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM