码迷,mamicode.com
首页 > 其他好文 > 详细

在vfork下,对于return和exit的理解

时间:2016-06-23 01:14:56      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:vfork下进程资源共享

fork是创建一个子进程,并把父进程的内存数据拷贝一份给子进程。

而vfork中内存数据所共享的,vfork保证子进程先运行,当子进程调用exit()或exec()后,父进程才会执行。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int main()
{
    pid_t id=vfork();
    if(id==0)
    {
        printf("child\n");
        sleep(1);
        return 1;
    }
    else
    {
        printf("father\n");
    }
    return 0;
}

技术分享

而把return 1;换成exit(1)

则能正常运行

如果在vfork子进程中return,这就意为main()函数return了,会把main函数所占用的栈清理掉,而父子进程共享,那么父进程在调用main函数时会调用子进程已清理的栈,出现错误。


return 会释放局部变量,并弹栈,回到上级函数执行。exit直接退掉。


所以,子进程调用exit没有修改函数栈,所以,父进程得以顺利执行。


在vfork下,对于return和exit的理解

标签:vfork下进程资源共享

原文地址:http://wanggaojun.blog.51cto.com/11409446/1791881

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!