这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 关于fork和vfork的问题

共4条 1/1 1 跳转至

关于fork和vfork的问题

高工
2013-09-16 19:28:04     打赏

今天试了一下fork()和vfork().结果有一点不解.具体问题如下:

创建了一个.c文件,内容如下:

#include <unistd.h>
#include <stdio.h>
int main(void)
{
        pid_t pid;
        int count = 0;
        pid = fork();

        count++;
        printf("count=%d\n",count);
        return 0;
}

打印出的结果为:

count=1
count=1
这个结果能够理解,问题就出现在下面的实验.我将当前.c文件中的fork改为vfork之后编译执行后输出的结果为:

count=1
count=2
count=1
.

.

.

count=1
count=2
count=1
打印出了很多count=1和count=2

这个是为什么额,为什么不是打印出一次count=1和count=2






关键词: vfork     问题    

高工
2013-09-16 22:34:12     打赏
2楼
创建子进程失败但是输出的结果是1和2是正确的啊,,只不过不停的重复着

高工
2013-09-16 22:41:02     打赏
3楼
恩,我再试试

高工
2013-09-17 00:22:45     打赏
4楼

您给出的程序验证的结论是:子进程创建成功,则在子进程中返回0,父进程中返回子进程的PID.通过您给出的代码和运行结果我已经明白了.但是我还是不能解释我帖子中提到的问题.

我做vfork实验目的有两点:

1.验证vfork与fork不同,vfork是与父进程共享地址空间

2.vfork建立子进程后是子进程运行父进程阻塞

我帖子里的代码运行后的结果是count=1,count=2这点可以验证目的1,但是不明白的是为什么会出现那么多个,count=1,count=2.

验证目的2我是在您给出的代码中加了一句:

        pid = vfork();
        if(pid == 0)
        {
                printf("this is child process\n");
                while(1);
        }
这样父进程将永远停留在阻塞状态.经过运行程序也验证了目的2 .


现在两个目的好像是都验证了,但是我还是不明白在使用我帖子里的那段代码时为什么会出现那么多个,count=1,count=2. 我认为结果应该是出现一次

count=1

count=2

对于您之前说的建立子进程失败,我觉得如果失败了,也不可能会有count=1 count=2这样的结果.

是不是我哪里想错了.....



共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]