系统调用基础知识以及该程序的内容

时间:2011-04-17 10:21:22

标签: c linux unix fork

我想知道这个程序关于系统调用的输出。我试着理解,但这很难。

int main (void) {
  pid_t pid;
  pid = fork(); 
  if (pid > 0) {
    int i; 
    for (i = 0; i < 5; i++) { 
      printf(" I AM VU : %d\n", i);
      sleep(1);
    }
    exit(0);
  } 
  else if (pid == 0) {
    int j;
    for (j = 0; j < 5; j++) {
      printf(" I have no child: %d\n", j);
      sleep(1);
    }
    exit(0);
  } else {
    fprintf(stderr, "can't fork, error %d\n", errno);
    exit (EXIT_FAILURE);
  }
}

2 个答案:

答案 0 :(得分:2)

获得此代码进行编译和运行后,父代将输出如下内容:

 I AM VU : 0
 I AM VU : 1
 I AM VU : 2
 I AM VU : 3
 I AM VU : 4 

单个孩子将输出如下内容:

 I have no child: 0
 I have no child: 1
 I have no child: 2
 I have no child: 3
 I have no child: 4

孩子的五行几乎肯定会与父母的输出线混在一起,所以你会在屏幕上看到类似的东西:

I AM VU : 0
I have no child: 0
I AM VU : 1
I have no child: 1
I have no child: 2
I have no child: 3
I AM VU : 2
I have no child: 4
I AM VU : 3
I AM VU : 4

如果fork()失败,程序将输出如下内容:

can't fork xx其中xx是错误的。

注意我不认为fork( )系统调用,而是调用函数。实践和效果差异很小,但仍然存在。

答案 1 :(得分:0)

&#39; man fork&#39;将回答有关fork返回的问题。

编译代码并使用&#39; strace -f a.out&#39;遵循它所做的事情。

我不确定该程序正在循环播放和休眠。我的猜测是,只是为了证明两个过程的输出顺序无法预测。