有的Linux命令后面會有一個?
老胡的看法:
Linux命令后面的&符號的含義是將這個命令作為一個作業(job)放到當前的shell的后臺執行。Linux為了方便在shell中同時能夠管理多個進程,設計了“作業”的概念。每一個作業對應系統中的一個進程,通過對作業的管理實現對進程的管理。
&”符號是將命令“作業”化的操作在一個命令后面加上“&”符號執行,實際上就是在執行了這個命令的同時,將它的進程作為一個作業提交給系統,并將它放到后臺執行。在執行的過程中可以使用作業控制命令來進行管理。如果此時用戶登出或者中斷了shell進程,放在后臺執行的命令不會受到影響,會一直執行到最后。
控制作業的一些操作控制作業的操作主要有Ctrl+z、bg、fg和disown。
Ctrl+z的作用是暫停當前運行的作業。bg的作用是將某項作業以后臺方式繼續運行,如下圖:
sleep的時候我按下了Ctrl+z暫停了作業,然后使用jobs查到了作業號為1,再使用bg %1(即作業號)將這個作業放置到后臺繼續運行,注意看后面有了一個"&"符號。再用jobs查看的時候,這個任務就已經在運行中了。
fg的作用就是將后臺運行的作業提到前臺,可以進行一些交互操作:
disown可以使作業忽略HUP信號,在shell退出的時候不會終止(老胡認為主要是在作業被Ctrl+z暫停的時候有意義):
disown -h %job使作業號為job的作業忽略HUP信號
disown -ah使所有作業忽略HUP信號
disown -rh使正在運行的作業忽略HUP信號
總結一下,Linux命令后面加上“&”符號之后再運行,就會作為后臺作業執行,不會受到用戶登出的影響,但是在shell進程被kill的時候會被終止;如果使用disown令其忽略HUP信號的話,則可以在shell進程被kill的時候轉為init的子進程繼續執行。
如果我的回答對你有點價值,請莫忘點贊加關注,謝謝!歡迎在評論區發表各種意見。
本文為作者原創,嚴禁轉載,違者必究。