Shell

程序未由終端啟動時的 IO 和其他 shell 命令

  • March 1, 2013

我的桌面上有幾個用於各種程序的啟動器,並且這些啟動器有一個“在終端中執行”設置。

當我檢查該設置時,程序從終端執行,並在那裡記錄其輸出。我想它也可以stdin從終端讀取。

但是:當程序不是由終端執行時,IO 會發生什麼?另外,當我從這樣的程序執行系統(shell)命令時會發生什麼?

是否有執行這些程序的“後台”外殼?還是每個程序都有它的外殼,通過它與系統的其餘部分互動?

當一個程序啟動時(通過exec(3)系統呼叫家族之一),它繼承環境(即,shell 變數exported)和來自父級的打開文件。啟動程序時所做的是fork(2),孩子設置環境和文件,然後exec(3)是新程序。當 shell 執行此操作時,STDIN、STDOUT 和 STDERR 連接到終端。任何圖形啟動器都取決於它,但應該將它們連接到/dev/null(鍵盤輸入應該從哪裡來,輸出應該去哪裡?)。

如果像這樣啟動的程序又呼叫exec(3),則如上所述。system(3)有點複雜,因為它會生成一個 shell 來進行命令行解析等等,然後那個 shellexec(3)就是命令。但機制是相同的:文件是繼承的,環境也是如此。

引用自:https://unix.stackexchange.com/questions/66538