用fork建立子程序後執行的是父程序相同的程式,但實際期望中,我們希望子程序應該執行和父程序不同的**。所以此時,子程序需要呼叫exec函式以執行另乙個程式,當程序呼叫一種exec函式時,該程序的使用者空間**和資料完全被新程式替換,並從新的程式的啟動例程開始執行。呼叫exec並不建立新程序,所以呼叫exec前後該程序的id並未改變。
我們開啟乙個終端的時候,我們可以在上面輸入各種命令,從而與終端實現互動。
可以發現,每當乙個指令的執行結束後,終端會等待我們的下一條指令的輸入。
這就類似於我們寫了乙個死迴圈,一直在等待著命令的輸入。當有一條指令輸入時,建立子程序並將子程序替換為命令,執行子程序並且父程序等待子程序的執行結束,從而實現互動。執行完後繼續等待下一條指令到達。
wait(null); // 父程序等待子程序結束
else
}int main();
while(1)
}
編寫簡單shell
shell英文翻譯為外殼,殼的意思 而在linux作業系統中,我們將它作為作業系統的外殼來理解。對shell工作原理的感性認識,shell在執行指令時,看似執行指令,實際是建立了shell的子程序來代替父程序shell來執行指令,此時子程序執行指令並不是shell的指令,而是乙個全新的指令。這裡就運...
自主shell的實現與封裝fork wait
在電腦科學中,shell俗稱殼 用來區別於核 是指 提供使用者使用介面 的軟體 命令解析器 它接收使用者命令,然後呼叫相應的應用程式。同時它又是一種程式語言。作為命令語言,它互動式解釋和執行使用者輸入的命令或者自動地解釋和執行預先設定好的一連串的命令 作為程式語言,它定義了各種變數和引數,並提供了許...
程序控制,自主實現shell
撤銷 ctrl command z 重做 ctrl command y 加粗 ctrl command b 斜體 ctrl command i 無序列表 ctrl command shift u 有序列表 ctrl command shift o 檢查列表 ctrl command shift c ...