當用戶註銷(logout)或者網絡斷開時,終端會收到 HUP(hangup)信號從而關閉其全部子進程。所以,咱們的解決辦法就有兩種途徑:要麼讓進程忽略 HUP 信號,要麼讓進程運行在新的會話裏從而成爲不屬於此終端的子進程。網絡
nohup 的用途就是讓提交的命令忽略 hangup 信號。code
nohup 的使用是十分方便的,只需在要處理的命令前加上 nohup 便可,標準輸出和標準錯誤缺省會被重定向到 nohup.out 文件中。通常咱們可在結尾加上"&"來將命令同時放入後臺運行,也可用">filename 2>&1"來更改缺省的重定向文件名。進程
[root@pvcent107 ~]# nohup ping www.ibm.com &
setsid 能夠讓進程忽略HUP信號,作到命令後臺執行的效果。後臺
setsid 的使用也是很是方便的,也只需在要處理的命令前加上 setsid 便可。file
若是咱們未加任何處理就已經提交了命令,該如何補救才能讓它避免 HUP 信號的影響呢?終端
能夠經過做業調度和 disown 來解決這個問題。重定向
用disown -h jobspec來使某個做業忽略HUP信號。di
用disown -ah 來使全部的做業都忽略HUP信號。文件
用disown -rh 來使正在運行的做業忽略HUP信號。ping
當使用過 disown 以後,會將把目標做業從做業列表中移除,咱們將不能再使用jobs來查看它,可是依然可以用ps -ef查找到它。
& 放在啓動參數後面表示設置此進程爲後臺進程