Linux setsid 背景

Linux小指令大功用-數個讓程序丟到背景運作而不受登出影響指令

薛乃榮 2018/12/30 00:16:24
3854

Linux小指令大功用-數個讓程序丟到背景運作而不受登出影響指令


簡介

相信各位運維人員透過Telnet/ssh做某些較長時間作業卻遇到以下問題被強制中斷 1.網路不穩造成作業未完成而失敗 2.登出系統或終端機與網路斷開連結

作者

薛乃榮


Linux小指令大功用-數個讓程序丟到背景運作而不受登出影響指令

相信各位運維人員透過Telnet/ssh做某些較長時間作業卻遇到以下情境
1.網路不穩造成作業未完成而失敗
2.登出系統或終端機與網路斷開連結,造成作業失敗
3.甚至作業太久又不知道如何離開而不中斷作業
狀況1:臨時有需求要將長時間運作,有何指令可丟到背景方法
A:nohup + &
nohup 的用途就是讓提交的命令忽略 hangup 信號。
由下圖可見只要在指令前加上nohup ,標準輸出/入就會寫到nohup.out,在指令後加上 & 同時將指令放入背景運作。
<nohup範例>
 
1-2:setsid
setsid能通過忽略HUP信號使用程序/指令受影響而中斷。
由下圖可見只要將setsid放在指令前,即可,還比nohup簡單。
<setsid範例>
看未加setsid指令的PID=22891而PPID=22519,而加上setsid並不為當前終端的pid,而是PID=22961/PPID=1。
二者也有所不同。
 
1-3: &
將&加在()內也可發現也有相同效果,父程序也是1。
<& 範例>
 
狀況2:知道如何避免HUP的影響,如遇到大量指令要執行時,該怎麼辦?
 
screen:
用screen -dm session name來建立一個處於斷開模式下的會話(並指定其會話名)。
用screen -list 來列出所有會話。
用screen -r session name來重新連接指定會話。
用快捷鍵CTRL-a d 來暫時斷開當前會話。
 
步驟(見下圖 session name 用thinkpower):
1.利用screen -dm <session name>,建立一個獨立的session。
2.指令screen -list,列出session列表。
3.再用screen -r <session name>進到session裡。
4.下想要的指令後,利用按鍵CRTL-a d暫時離開session。
5.如果要再進去可以再利用screen -r <session name>即可。
6.也可以建立後多個session,做不同事情,也互不干擾。
總結:
nohup及setsid是最臨時也最快的方法,如果要大量操作,screen就能派上用場了。
改天再為各位奉上screen其他用法。
薛乃榮