首页 > 代码库 > 4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()
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()