Linux多程序學習

2021-08-24 17:27:58 字數 1337 閱讀 7914

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 殭屍 已經結束但依然佔據程...