2014-03-04 56 views

回答

3

從命令提示即交互運行的命令,例如「emacs的xxx.txt」,在一個新的處理組,

setsid emacs xxx.txt & 

如在連接「linux命令setsid」所描述的, setsid命令的行爲可能會令人驚訝(並且在我剛剛使用的linux中,該手冊頁根本沒有幫助)。所以......

如果你想從一個劇本內生成一個命令並有命令繼續腳本退出後,雙setsid:

setsid setsid emacs xxx.txt 

...的理由是:

  • 當bash調用腳本期間setsid,setsid保持的bash的解釋器過程的進程組ID等:

    setsid emacs xxx.txt

    ... blocks(請參閱鏈接的文章)。但它確實樹立了新的進程組運行的emacs

  • 你可以用 '&' 的背景前:

    setsid emacs的xxx.txt &

    ...但還有一個競爭條件在後臺進程獲取到setsid改變進程組(這可能會殺子過程)

  • 所以我們要等待進程組的變化發生點之前調用腳本可能會退出;嵌套setsid保證叉,因爲 外setsid不是一個進程組組長,並已經有了一個新的進程組ID,由外setsid

即設定,當我們序列一倍setsid是:

  1. 的bash叉兒1,把它留在bash的進程組
  2. 孩子1名高層setsid
  3. 孩子1個setsid看到它是不是一個組長等調用setsid系統調用 (這將創建新的會話,並給出孩子1一個新的進程組) 然後高管內setsid
  4. 內setsid認爲它是一組組長,所以派生子2,兒童1 退出
  5. 孩子2看到它是不是一個組長所以調用setsid系統調用(它創建 一個新的會話,並給出孩子2一個新的進程組),然後高管 emacs的

腳本內,如果你想與指揮通信,並等待它退出,請參閱bash manpage中的子進程。

相關問題