Linux shell中執行可執行程式後加上&的作用
學習UNP時,學到了在命令後加上字元“&”後,退出shell,執行的命令可以繼續執行。不解原因,併到網上搜索了以下,明白了!
以下是搜尋到的片段:
& 放在啟動引數後面表示設定此程序為後臺程序
預設情況下,程序是前臺程序,這時就把Shell給佔據了,我們無法進行其他操作,對於那些沒有互動的程序,很多時候,我們希望將其在後臺啟動,可以在啟動引數的時候加一個'&'實現這個目的。
如:
tianfang > run &
[1]11319
tianfang > ./game.e 1 &
程序切換到後臺的時候,我們把它稱為job。切換到後臺時會輸出相關job資訊,以前面的輸出為
前後臺間切換
可以通過bg (background)和fg(foreground)命令將其在前後臺間狀態切換。
守護程序
如果一個程序永遠都是以後臺方式啟動,並且不能受到Shell退出影響而退出,一個正統的做法是將其建立為守護程序。守護程序值得是系統長期執行的後臺程序,類似Windows服務。守護程序資訊通過ps–a無法檢視到,需要用到–x引數,當使用這條命令的時候,往往還附上-j引數以檢視作業控制資訊,其中TPGID一欄為-1就是守護程序。
tianfang> ps xj
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
953 1190 1190 1190 ? -1 Ss 1000 0:00 /bin/sh/usr/bin/startkde
1 1490 1482 1482 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient–seamless
1 1491 1477 1477 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient–display
建立守護程序最關鍵的一步是呼叫setsid函式建立一個新的Session,併成為SessionLeader。成功呼叫該函式的結果是:
- 建立一個新的Session,當前程序成為SessionLeader,當前程序的id就是Session的id
- 建立一個新的程序組,當前程序成為程序組的Leader,當前程序的id就是程序組的id
- 如果當前程序原本有一個控制終端,則它失去這個控制終端,成為一個沒有控制終端的程序。