两个条件如何在if-ifelse-else语句中起作用?

时间:2013-01-31 17:03:39

标签: c if-statement

我的教授在C中显示以下示例:

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main() {
   pid_t pid;

   /* fork another process */
   pid = fork();
   if (pid < 0) { /* error occurred */
         fprintf(stderr, "Fork Failed");
         return 1;
   }
   else if (pid == 0) { /* child process */
         execlp("/bin/ls", "ls", NULL);
   }
   else { /* parent process */
        /* parent will wait for the child */
        wait (NULL);
        printf("Child Completed its execution\n");
   }

return 0;
}

我编译并运行它。我在这段代码中看到了一个奇怪的行为:

打印'ls'程序/命令的结果,这是在else if条件下,但是也打印了字符串“Child Completed its execution \ n”,这是在其他地方。

这不是一种奇怪的行为吗?

2 个答案:

答案 0 :(得分:5)

不,你分叉了。有两个进程在运行。一个报告了ls,另一个报告了printf()。

具体来说,子/ forked进程执行/ bin / ls和父进程调用printf(),你看到的输出。

答案 1 :(得分:2)

那是因为fork创建了一个子进程,它继续从代码中的同一点开始执行,但pid设置为0.您看到的是执行{{1}的父进程行,而子进程正在执行printf命令。