unix中的vfork函数
一、前言
本文介绍unix中的vfork函数,vfork函数功能和fork函数类似,也是用于创建新的进程,只不过调用vfork函数创建的子进程将共享父进程的进程空间,且只有当子进程调用exec()或者exit()函数后,父进程才会继续运行。
二、vfork
vfork的函数原型如下:
#include <unistd.h>
pid_t vfork(void);
参考代码如下:
/*************************************************************************
> File Name: vfork_test.c
> Author: conbiao
> Created Time: 2024年09月23日 星期一 20时01分32秒
************************************************************************/
/***********************************************************************
* HEADER
**********************************************************************/
#include <stdio.h>
#include <unistd.h>
/***********************************************************************
* MACRO
**********************************************************************/
/***********************************************************************
* GLOBAL VARIABLE
**********************************************************************/
/***********************************************************************
* FUNCTION DESCRIPTION
**********************************************************************/
/***********************************************************************
* FUNCTION NAME:
***********************************************************************
*
* Summary:
*
* Params:
*
* Return:
*
***********************************************************************/
/***********************************************************************
* MAIN
**********************************************************************/
int main(int argc, char *argv[])
{
int ret = 0;
int num = 10;
pid_t pid;
printf("%s: start!\n",__func__);
if((pid = vfork()) < 0)
{
printf("%s: fork fail!\n",__func__);
}
else if(pid == 0)
{
printf("%s: This is child process!\n",__func__);
num += 10;
_exit(0);
}
else
{
printf("%s: This is parent procee,child's pid is: %d\n",__func__,pid);
}
printf("%s: num = %d\n",__func__,num);
return ret;
}
运行结果如下:
(2-1)
如上图所示,子进程修改的num会改变父进程的num,因为子进程共享了父进程的进程空间。
参考资料:
《UNIX环境高级编程(第3版) (史蒂文斯 (W.Richard Stevens) 拉戈 (Stephen A.Rago))(Z-Library)》