LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1109|回复: 10

帮忙,哪位大哥看得懂这条小程序?

[复制链接]
发表于 2004-10-12 09:06:44 | 显示全部楼层 |阅读模式
main() {
    int pid;

    pid = fork();

    if (pid == -1) perror("failed: ");
    if (pid ==  0) {
        printf("child\n");
        execl("./fork", "");
    }
    else
        printf("parent\n");
    wait(NULL);
}

我有几个问题:
1。这段程序到底是怎么执行的,怎么我一运行,就好像不停的执行,不就执行 一次吗?

2。wait(NULL)的作用是什么?
发表于 2004-10-12 09:13:04 | 显示全部楼层
fork 子进程后子进程又重新fork新的……

wait 用来防止Zombie
发表于 2004-10-12 10:23:29 | 显示全部楼层
难得他居然真的把编译出来的程序就输出为fork
 楼主| 发表于 2004-10-13 12:55:30 | 显示全部楼层
最初由 lzlz 发表
fork 子进程后子进程又重新fork新的……

wait 用来防止Zombie



那么说其它的语句就不执行了吗?以下的语句:

if (pid == -1) perror("failed: ");
if (pid == 0) {
printf("child\n");
execl("./fork", "");
}
else
printf("parent\n");
wait(NULL);
 楼主| 发表于 2004-10-13 14:28:09 | 显示全部楼层
我用gdb一步步调试时,怎么程序只执行一次,就停了,但是我编译完成运行时,程序不停的在运行,怎么回事?

那位大哥能告诉我程序执行的步骤?
发表于 2004-10-14 14:50:59 | 显示全部楼层
你gdb调试的时候只是一个进程,但是实际是两个进程在跑。一个parent一个child.wait(NULL)是parent等待child进程结束以后,自己再结束。
发表于 2004-10-14 23:31:04 | 显示全部楼层
这条程序的意思是:不断执行某个程序直到死机
发表于 2004-10-14 23:35:07 | 显示全部楼层

  1. run---fork---
  2.        |
  3.       run---fork--
  4.              |
  5.             run--fork--
  6.                   |
  7.                  run--fork....
  8.                        |
  9.                        .
  10.                        .
  11.                        .
复制代码
发表于 2004-10-15 08:39:20 | 显示全部楼层
最初由 lucifer 发表
难得他居然真的把编译出来的程序就输出为fork
同意
 楼主| 发表于 2004-10-20 12:55:30 | 显示全部楼层
最初由 luoyong 发表

  1. run---fork---
  2.        |
  3.       run---fork--
  4.              |
  5.             run--fork--
  6.                   |
  7.                  run--fork....
  8.                        |
  9.                        .
  10.                        .
  11.                        .
复制代码


这么说这条程序并没有执行fork函数以后的语句咯,是这样吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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