1、fork()一次呼叫兩次返回?
#include #include using namespace std;
int main()
else
}
執行結果:
i'm parent,ppid is 10037,and pid is 10038
i'm child,pid is 10038
press to close this window...
當新建程序的時候,子程序會拷貝父程序的堆疊段和資料段,這裡是拷貝說明兩個程序的上述資源已經完全分開了,這裡唯一還在共享的就是**段。新建程序的時候,任務管理其會在父程序堆疊段中儲存其子程序的程序id,而子程序沒有子程序所以子程序相關位置儲存的就是零。
當程式執行到fork()處的時候,程式分化為兩個程序,但是兩個程序還是共享**段,任務排程器決定先執行哪乙個linux中首先執行父程序,在父程序中fork()返回子程序的pid,而後執行子程序,因為子程序中沒有子程序所以返回0,以上就是為什麼fork()呼叫一次執行兩次了,執行的兩次是在不同的程序中執行的。
2、fork()excu函式族
fork()函式「複製」乙個與父程序基本相同的子程序,這兩個程序做著同樣的事情,然後通過在子程序中呼叫excu函式族,載入子程式,完成對子程序的替換,這裡雖然說是替換但子程序的程序號並沒有改變。
3、exec函式族的說明:原文連線
exec函式族裝入並執行程式path/file,並將引數arg0(arg1, arg2, argv, envp)傳遞給子程式,出錯返回-1.
在exec函式族中,字尾l、v、p、e指定函式將具有某種操作能力: 字尾
操作能力
l希望接收以逗號分隔的引數列表,列表以null指標作為結束標誌
v希望接收到乙個以null結尾的字串陣列的指標
p是乙個以null結尾的字串陣列指標,函式可以dos的path變數查詢子程式檔案
e函式傳遞指定引數envp,允許改變子程序的環境,無字尾e時,子程序使用當前程式的環境
4、程序間的通訊
1)通過兩個程序對乙個檔案的讀寫完成通訊
5、exit()函式:表示退出目前的程序,exit(arg) arg==0表示正常退出,不為零表示錯誤退出
#include #include #include #include #include #include #include #include using namespace std;
char command[256];
int main()
if(pid == 0)
else
}
linux多程序程式設計
在linux中,執行的乙個程序,會占去linux的三個地方,區,堆疊區和資料區.如果同時執行多個相同的程式,他們就會使用相同的 區,區中存放的就程式的 但是資料區和堆疊區分別存放的是程式的資料,全域性變數和區域性變數,因此即使是相同的程式,也不可同時使用相同的資料和堆疊區.include inclu...
linux 多程序 缺點
fork有一些 其中最明顯的就是重複的檔案描述符。比如,socket,磁碟上的檔案,終端 標準輸入 輸出,錯誤 或某些其他檔案類物件。因為乙個程序的fork是乙個準確的拷貝,它繼承了父程序的所有檔案描述符和socket,所以就可能遇到這樣乙個情況,那就是父程序和子程序對於乙個單一的遠端主機,都有乙個...
linux多程序使用
init程序是所有程序的父或者祖父 程序的組成 使用者 id cpu時間片 記憶體 狀態 時鐘 優先順序 源程式 fd 程序的狀態 man ps process state codes r 執行或可執行 d 不可中斷睡眠 s 可中斷睡眠 t 掛起 暫停 等待 x 死亡 z 殭屍 已經結束但依然佔據程...