关于子进程和父进程--fork函数

Posted on 2008-07-06 23:40 MichaelCao 阅读(9367) 评论(8)  编辑 收藏 引用 所属分类: OS
      我总算有点眉目了.原来在fork()之后系统就有两个一样的进程了.以前一直晕,两个一样的进程?那有什么用啊?其实是fork()这个函数会返回两次而已.对于子进程,得到的是0,而对于父进程,得到却是子进程的pid,这样根据得到不同的pid,然后两个进程就可以进行不一样的运行了.并且子进程继承了父进程的数据段,代码段,这个也就是说变量阿还是有的,代码阿还是会运行的.
    贴点代码稍稍解释一下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>

int main(void)
{
        pid_t pid=fork();
        if(pid==0)
        {
                int j ;
                for(j=0;j<10;j++)
                {
                        printf("child: %d\n",j);
                        sleep(1);
                }
        }
        else if (pid>0)
        {
                int i;
                for(i=0;i<10;i++)
                {
                        printf("parent: %d\n",i);
                        sleep(1);
                }
        }
        else
        {
                fprintf(stderr,"can't fork ,error %d\n",errno);
                exit(1);
        }
        printf("This is the end !");
}
    运行了这段代码,我想应该所有人都应该了解fork了吧.运行的时候可以查看进程(ps -aux),会发现有两个一样的进程,运行结束后最后一句printf会运行两次,因为每个进程都会运行一次.中间的交替就是进程的调度了.我也是刚刚明白,还有很多东西要深刻理解.总算有点眉目了.很爽.

Feedback

# re: 关于子进程和父进程--fork函数  回复  更多评论   

2008-07-07 08:48 by 酸菜
怎么现在什么样的文档都放在首页上。

# re: 关于子进程和父进程--fork函数[未登录]  回复  更多评论   

2008-07-07 09:29 by raof01
没看过apue吧

# re: 关于子进程和父进程--fork函数  回复  更多评论   

2008-07-07 12:53 by cppexplore
唉 深入学习前 先多看看基础的书

# re: 关于子进程和父进程--fork函数  回复  更多评论   

2008-07-07 15:49 by cexer
加油,这个至少证明了你在思考。

# re: 关于子进程和父进程--fork函数[未登录]  回复  更多评论   

2008-07-08 11:47 by cppexplore
系统全面的看下
要不 今天发现了fork 很惊奇感慨
明天又发现了pthread_cond,又很惊奇感慨
某天又发现了pthread_testcancel,又很惊奇感慨
某天天又发现了还有惊群的说法,再来感慨。

不如直接浏览下apue unp之类的书,全面的看下。
博主还是很有专研精神的,把握好大方向,基础打坚实,.......

# re: 关于子进程和父进程--fork函数  回复  更多评论   

2008-08-19 15:19 by pp
谢谢啊,我正糊涂呢,现在算是明白了

# re: 关于子进程和父进程--fork函数  回复  更多评论   

2009-02-24 11:40 by 陆浩
发现了个问题,这段代码j设置为奇数何偶数时打印的结果是不一样的:奇数时父进程先运行,偶数时子进程先运行。谁能帮忙解释下?

# re: 关于子进程和父进程--fork函数  回复  更多评论   

2009-09-19 08:29 by WillCao
@陆浩
嗯,你看的还是挺仔细的嘛。这个事情是这样的。原则上我们规定在fork出新的进程后,应该让子进程先运行。但是这个好像并没有被完整的实现。所以有的时候会出现父进程先运行的情况。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


posts - 16, comments - 16, trackbacks - 0, articles - 0

Copyright © MichaelCao