1fork()函數
子程序複制父程序的0到3g空間和父程序核心中的pcb,但id号不同。fork調用一次傳回兩次,有以下特點:
a:父程序中傳回子程序id
b:子程序中傳回0
c:讀時共享,寫時複制
2fork()依賴的頭檔案
#include <unistd.h>
3fork()函數說明:
pid_tfork(void);
通過該函數建立一個子程序
4案例說明:
總結:
a因為讀時共享和寫時複制,子程序會複制父程序的代碼,但是從fork下開始執行。但是,當在fork前定義父子程序都用到的變量的時候,這時候父子程序并不是同時操作這個變量,而是互相獨立的,也就是說:子程序指定自己的n,不會在父程序的n的基礎上操作。
5.getpid/getppid
a依賴的頭檔案
#include<sys/types.h>
b函數聲明
uid_t getuid(void);
//傳回實際使用者id
uid_t geteuid(void);
//傳回有效使用者id
c:案例說明
6.getuid()函數
#include <sys/types.h>
uid_t getuid(void);
//獲得使用者id
uid_t geteuid(void);
//獲得有效的使用者id
函數說明:
通過getuid()函數和geteuid()函數獲得使用者的id
案例說明:
運作結果:
7.getgid()函數
a:依賴的頭檔案
gid_t getgid(void);
gid_t getegid(void);
通過這個函數實作獲得組的id
c案例說明:
vfork
用于fork後馬上調用exec函數
父子程序,公用同一位址空間,子程序如果沒有馬上exec而是修改了父程序得到的變量值,此修改會在父程序中生效
設計初衷,提高系統效率,減少不必要的開銷
現在fork已經具備讀時共享寫時複制機制,vfork逐漸廢棄。