Linux系統程式設計 vfork 函式詳解

2021-07-03 11:14:59 字數 1651 閱讀 1475

#include

#include

功能:

vfork() 函式和 fork() 函式(fork()如何使用,

請點此鏈結)一樣都是在已有的程序中建立乙個新的程序,但它們建立的子程序是有區別的。

引數:

返回值:

成功:子程序中返回 0,父程序中返回子程序 id。pid_t,為無符號整型。

失敗:返回 -1。

1)fork(): 父子程序的執行次序不確定。

vfork():保證子程序先執行,在它呼叫 exec(程序替換) 或 exit(退出程序)之後父程序才可能被排程執行。

2)fork(): 子程序拷貝父程序的位址空間,子程序是父程序的乙個複製品。

vfork():子程序共享父程序的位址空間(準確來說,在呼叫 exec(程序替換) 或 exit(退出程序) 之前與父程序資料是共享的)

}上面的**,已經讓子程序延時 3 s,

結果還是子程序執行結束後,父程序才執行,執行結果如下:

#include #include #include int a = 10;

int main(int argc, char *argv)

if(0 == pid)else if(pid > 0)

return 0;

}

通常執行結果得知,子程序修改 a, b 的值,會影響到父程序的 a, b, 效果圖如下:

vfork() 保證子程序先執行,在它呼叫 exec(程序替換) 或 exit(退出程序)之後父程序才可能被排程執行。如果子程序沒有呼叫 exec, exit, 程式則會導致死鎖,程式是有問題的程式,沒有意義,測試**如下:

#include #include #include int main(int argc, char *argv)

if(0 == pid)else if(pid > 0)

return 0;

}

執行結果如下:

用 vfork() 建立程序,子程序裡一定要呼叫 exec(程序替換) 或 exit(退出程序),否則,程式會出問題,沒有意義。

**:

系統程式設計 程序 fork深度理解 vfork簡介

1.fork基本使用 include include intmain else if pid 0 else printf getpid d n getpid sleep 1 return0 執行 基本說明 fork的返回值,在父程序中返回的是子程序的程序id,在子程序中返回的是0。補充說明 使用fo...

Linux 系統程式設計

1 i o操作 2 檔案和目錄管理 3 記憶體管理 1 建立匿名記憶體對映 2 對映 dev zero檔案 類unix 作業系統中,dev zero是乙個特殊的檔案,當你讀它的時候,它會提供無限的空字元 null,ascii nul,0x00 其中的乙個典型用法是用它提供的字元流來覆蓋資訊,另乙個常...

Linux系統程式設計

1.linux程序 守護程序 脫離終端的後台程序 2.linux程序 殭屍程序 3.linux 下程序通訊 其中setsockopt server sockfd,sol socket,so reuseaddr,on,sizeof on 因為每乙個連線都由本地位址和遠端位址的組合唯一確定,所以只要遠端...