4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()
1fork()函數(shù)
子進(jìn)程復(fù)制父進(jìn)程的0到3g空間和父進(jìn)程內(nèi)核中的PCB,但id號(hào)不同。fork調(diào)用一次返回兩次,有以下特點(diǎn):
A:父進(jìn)程中返回子進(jìn)程ID
B:子進(jìn)程中返回0
C:讀時(shí)共享,寫時(shí)復(fù)制
2fork()依賴的頭文件
#include <unistd.h>
3fork()函數(shù)說明:
pid_tfork(void);???????????????????????????
通過該函數(shù)創(chuàng)建一個(gè)子進(jìn)程
4案例說明:
總結(jié):
A因?yàn)樽x時(shí)共享和寫時(shí)復(fù)制,子進(jìn)程會(huì)復(fù)制父進(jìn)程的代碼,但是從fork下開始執(zhí)行。但是,當(dāng)在fork前定義父子進(jìn)程都用到的變量的時(shí)候,這時(shí)候父子進(jìn)程并不是同時(shí)操作這個(gè)變量,而是相互獨(dú)立的,也就是說:子進(jìn)程指定自己的n,不會(huì)在父進(jìn)程的n的基礎(chǔ)上操作。
5.getpid/getppid
A依賴的頭文件
#include <unistd.h>
#include<sys/types.h>
B函數(shù)聲明
uid_t getuid(void);?? //返回實(shí)際用戶ID
uid_t geteuid(void);? //返回有效用戶ID
C:案例說明
6.getuid()函數(shù)
A依賴的頭文件
#include <unistd.h>
#include <sys/types.h>
B函數(shù)聲明
uid_t getuid(void);??? //獲得用戶id
uid_t geteuid(void);?? //獲得有效的用戶id
函數(shù)說明:
通過getuid()函數(shù)和geteuid()函數(shù)獲得用戶的id
案例說明:
運(yùn)行結(jié)果:
7.getgid()函數(shù)
A:依賴的頭文件
#include <unistd.h>
#include <sys/types.h>
B函數(shù)聲明
gid_t getgid(void);
gid_t getegid(void);
函數(shù)說明:
通過這個(gè)函數(shù)實(shí)現(xiàn)獲得組的id
C案例說明:
運(yùn)行結(jié)果:
?
vfork
?? 用于fork后馬上調(diào)用exec函數(shù)
?? 父子進(jìn)程,公用同一地址空間,子進(jìn)程如果沒有馬上exec而是修改了父進(jìn)程得到的變量值,此修改會(huì)在父進(jìn)程中生效
?? 設(shè)計(jì)初衷,提高系統(tǒng)效率,減少不必要的開銷
?? 現(xiàn)在fork已經(jīng)具備讀時(shí)共享寫時(shí)復(fù)制機(jī)制,vfork逐漸廢棄。
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么捷信显示还双倍
- 下一篇: 5进程原语:execl(),execlp