首页 > 解决方案 > 为什么“return 0”语句没有到达?

问题描述

这是我的程序:

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

int main(void) 
{ 
    
    int i;
    for (i=0; i < 3; i++) {
        int id = fork();
        if(id != 0) {
            printf("This process is running under parent process \n");
        }
        else {
            printf("This process id = %d, is a child process of parent process id = %d\n", getpid(),getppid());
        }
        return 0;
    }
}

当它完成第一个循环时,我假设它应该打印“这个进程在父进程下运行\n”然后点击return 0;语句。但它似乎没有按我的预期工作。

这是我的输出

This process is running under parent process 
This process id = 839, is a child process of parent process id = 1

我需要对此进行解释。

标签: cloopsreturnfork

解决方案


在这种情况下,父进程在子进程调用之前退出getppid(),因此子进程被重新设置为 init。

由于您没有获得更多输出,因此显然return 0;已达到。

fork()被调用一次,但返回两次。这就是您获得新流程的方式。循环是不必要的。

此外,返回notfork()类型的变量。分配给 type 似乎很安全,但我被烧过一次。pid_tintint


推荐阅读