《Linux系統呼叫 vfork》

2021-10-02 06:28:33 字數 1670 閱讀 8063

vfork() 函式和 fork() 函式(fork()如何使用,請點此鏈結)一樣都是在已有的程序中建立乙個新的程序,但它們建立的子程序是有區別的

fork() 與 vfock() 都是建立乙個程序,那它們有什麼區別呢?

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

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

2.fork(): 子程序拷貝父程序的位址空間,子程序是父程序的乙個複製品。vfork():子程序共享父程序的位址空間(準確來說,在呼叫 exec(程序替換) 或 exit(退出程序) 之前與父程序資料是共享的)

返回值:

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

①. vfork 父子程序順序

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

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

return 0;

}

②. 子程序共享父程序的位址空間

#include #include #include int a = 10;

int main(int argc, char *ar**)

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

return 0;

}

yexiang@ubuntu:$ gcc vfork.c 

yexiang@ubuntu:$ ./a.out

son: a = 100, b = 200

father: a = 100, b = 200

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

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

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

return 0;

}

yexiang@ubuntu:$ gcc vfork.c

yexiang@ubuntu:$ ./a.out

i am son

i am father

a.out: cxa_atexit.c:100: __new_exitfn: assertion `l != null' failed.

aborted (core dumped)

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

include include 功能 vfork 函式和 fork 函式 fork 如何使用,請點此鏈結 一樣都是在已有的程序中建立乙個新的程序,但它們建立的子程序是有區別的。引數 無 返回值 成功 子程序中返回 0,父程序中返回子程序 id。pid t,為無符號整型。失敗 返回 1。1 fork ...

linux 系統呼叫

使用者應用可以通過兩種方式使用系統呼叫。第一種方式是通過c庫函式,包括系統呼叫在c庫中的封裝函式和其他普通函式。圖5.2 使用系統呼叫的兩種方式 第二種方式是使用 syscall巨集。2.6.18版本之前的核心,在include asm i386 unistd.h檔案中定義有7個 syscall巨集...

Linux系統呼叫

一 實驗目的和要求 1.學習linux核心的配置和編譯 2.深入理解linux系統呼叫 3.理解arm和x86的cpu模式 系統模式 使用者模式 的不同 4.掌握核心模組的編寫方法。二 實驗器材 1.linux實驗板卡一塊 2.5v 1a電源乙個 3.microusb線一根 4.macos一台 5....