首页 > 代码库 > 4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()

4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()



1fork()函数

子进程复制父进程的03g空间和父进程内核中的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()