QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1367|回复: 7

linux编程中的进程创建的问题,脑子快想炸了。

[复制链接]
发表于 2006-6-3 08:08:15 | 显示全部楼层 |阅读模式
有这样一段程序

#include<unistd.h>

int  main(void)
{
    int i;

    for(i=0;i<3;i++)
      if(fork()) i++;

   sleep(5);
   return i;
}

  这个程序将创建多少个进程? 结构树是什么样子的?
  各位高手快帮帮忙,在线等。
发表于 2006-6-3 08:23:26 | 显示全部楼层
一共是五个
回复

使用道具 举报

 楼主| 发表于 2006-6-3 08:30:38 | 显示全部楼层
答案是5个

    1
   /  \
  2   5
  |
  3
  |
  4

我实在想不通为什么是这样。
回复

使用道具 举报

发表于 2006-6-3 10:13:17 | 显示全部楼层
这个比较简单,应当注意的是fork后子进程fork的返回值是0,这就使if(fork)的那个i++没有执行,只执行了for里的i++.
回复

使用道具 举报

发表于 2006-6-3 11:03:41 | 显示全部楼层
[code:1]
            1
        /       \
      1          2
    /  \        /  \
   1   3       2    4
                    / \
                    4  5
[/code:1]
数字是进程的id.所以一共有5个./fork程序在运行

如果想当父进程,i就要加2(for里的i++,和if后面的i++),
如果只做子进程i每次就只加1(for里面的i++).
回复

使用道具 举报

 楼主| 发表于 2006-6-6 07:33:36 | 显示全部楼层
楼上的这个似乎不对吧。这是我们小测验的题目,考后老师给的答案应该不会错。看来这里没有人会这道题,我们期末的题目比这个还要复杂。
回复

使用道具 举报

发表于 2006-6-6 09:31:09 | 显示全部楼层
[code:1]
#include <unistd.h>
#include <stdio.h>

int main(void)
{
    int i;
    for(i=0;i<3;i++)
        if(fork()) i++;
    printf("%d\n",getpid());
    sleep(5);
    return i;
}

[/code:1]
回复

使用道具 举报

发表于 2006-6-6 10:32:56 | 显示全部楼层
应该是这个样子

1
/ \
2 3
|
4
|
5

或者是

1
/ \
2 4
|
3
|
5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 14:17 , Processed in 0.057526 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表