4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()
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()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么捷信显示还双倍
- 下一篇: 莫高股份是做什么的