1.fork函数
头文件: #include <sys/types.h>
#include <unistd.h>
函数原型: pid_t fork(void);
函数参数: 无
函数功能:创建子进程
返回值: 父进程:返回子进程的pid
子进程:返回0
错误:-1,并且使用perror查看错误信息
2.vfork函数
当用vfork创建进程时,若以return 0 结束则释放局部变量,以exit(0)结束则不会释放。
无参数,除了task_struct结构和系统空间堆栈外,其他的资源全部通过数据结构指针的方式进行复制遗传,所以vfork()出来的是线程而不是进程。vfork()是出于效率的考虑而设计的。
fork与vfork都可以创建一个进程,但vfork是由fork封装得来的。
vfork一个子进程,先执行子进程,子进程沿用父进程中的变量,当以exit(0)结束后,父进程可仍沿用子进程中的变量。当以return 0 结束则释放局部变量,父进程再引用时则会为系统给的随机值。
子进程拷贝父进程的代码段如下:
程序运行结果: