ubuntu:讓終端命令進入後臺

參考了以下博文:
https://www.cnblogs.com/york-hust/archive/2012/05/30/2525842.html
對於正在運行的命令,同時按ctrl和z可以暫停改命令執行,在輸入bg表示將該命令放入後臺運行,此時用jobs查看當前的後臺運行的命令;disown -h 表示設置該任務不受HUP影響;fg表示將其提到前面運行。
在這裏插入圖片描述
摘自https://www.cnblogs.com/york-hust/archive/2012/05/30/2525842.html:
我們知道,當用戶註銷(logout)或者網絡斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要麼讓進程忽略 HUP 信號,要麼讓進程運行在新的會話裏從而成爲不屬於此終端的子進程。
靈活運用 CTRL-z
在我們的日常工作中,我們可以用 CTRL-z 來將當前進程掛起到後臺暫停運行,執行一些別的操作,然後再用 fg 來將掛起的進程重新放回前臺(也可用 bg 來將掛起的進程放在後臺)繼續運行。這樣我們就可以在一個終端內靈活切換運行多個任務,這一點在調試代碼時尤爲有用。因爲將代碼編輯器掛起到後臺再重新放回時,光標定位仍然停留在上次掛起時的位置,避免了重新定位的麻煩。
用disown -h jobspec 來使某個作業忽略HUP信號。
用disown -ah 來使所有的作業都忽略HUP信號。
用disown -rh 來使正在運行的作業忽略HUP信號。
需要注意的是,當使用過 disown 之後,會將把目標作業從作業列表中移除,我們將不能再使用jobs來查看它,但是依然能夠用ps -ef查找到它。

但是還有一個問題,這種方法的操作對象是作業,如果我們在運行命令時在結尾加了"&"來使它成爲一個作業並在後臺運行,那麼就萬事大吉了,我們可以通過jobs命令來得到所有作業的列表。但是如果並沒有把當前命令作爲作業來運行,如何才能得到它的作業號呢?答案就是用 CTRL-z(按住Ctrl鍵的同時按住z鍵)了!

CTRL-z 的用途就是將當前進程掛起(Suspend),然後我們就可以用jobs命令來查詢它的作業號,再用bg jobspec 來將它放入後臺並繼續運行。需要注意的是,如果掛起會影響當前進程的運行結果,請慎用此方法。

disown 示例1(如果提交命令時已經用“&”將命令放入後臺運行,則可以直接使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile &
[1] 4825
[root@pvcent107 build]# jobs
[1]+ Running cp -i -r testLargeFile largeFile &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile
root 4825 968 1 09:46 pts/4 00:00:00 cp -i -r testLargeFile largeFile
root 4853 968 0 09:46 pts/4 00:00:00 grep largeFile
[root@pvcent107 build]# logout

disown 示例2(如果提交命令時未使用“&”將命令放入後臺運行,可使用 CTRL-z 和“bg”將其放入後臺,再使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile2

[1]+ Stopped cp -i -r testLargeFile largeFile2
[root@pvcent107 build]# bg %1
[1]+ cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# jobs
[1]+ Running cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile2
root 5790 5577 1 10:04 pts/3 00:00:00 cp -i -r testLargeFile largeFile2
root 5824 5577 0 10:05 pts/3 00:00:00 grep largeFile2
[root@pvcent107 build]#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章