標籤:style blog http ar for 檔案 2014 div sp
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 <unistd.h>
#include<sys/types.h>
B函式宣告
uid_t getuid(void); //返回實際使用者ID
uid_t geteuid(void); //返回有效使用者ID
C:案例說明
6.getuid()函數
A依賴的標頭檔
#include <unistd.h>
#include <sys/types.h>
B函式宣告
uid_t getuid(void); //獲得使用者id
uid_t geteuid(void); //獲得有效使用者id
函數說明:
通過getuid()函數和geteuid()函數獲得使用者的id
案例說明:
運行結果:
7.getgid()函數
A:依賴的標頭檔
#include <unistd.h>
#include <sys/types.h>
B函式宣告
gid_t getgid(void);
gid_t getegid(void);
函數說明:
通過這個函數實現獲得組的id
C案例說明:
運行結果:
vfork
用於fork後馬上調用exec函數
父子進程,公用同一地址空間,子進程如果沒有馬上exec而是修改了父進程得到的變數值,此修改會在父進程中生效
設計初衷,提高系統效率,減少不必要的開銷
現在fork已經具備讀時共用寫時複製機制,vfork逐漸廢棄。
4進程原語:fork()函數,getpid()函數和getppid()函數,getuid()函數,getgid()函數,vfork()