结束子进程返回0

时间:2017-03-19 23:03:17

标签: c fork

return 0中的case 0是正确的选择吗?换句话说,return 0是否会调用_exit()函数?或者它可能会调用exit(),因此这段代码不安全?

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

int main(void)
{
    printf("hello_fork! (PID=%lu)\n", (unsigned long)getpid());
    pid_t pid = fork();
    switch(pid){
        case -1: perror("fork"); return 1;

        case 0: printf("child: PID=%lu\n", (unsigned long)getpid());
        return 0;

        default: printf("parent: PID=%lu\n\n", (unsigned long)getpid()); 
        if(wait(NULL)<0) 
            perror("wait");
        printf("THE END\n");
        return 0;
    }
}

1 个答案:

答案 0 :(得分:3)

return函数调用main等同于调用exit

来自C standard的第5.1.2.2.3节:

  

如果main函数的返回类型是兼容的类型   int,从初始调用到main函数的返回是   相当于使用返回的值调用exit函数   main函数作为参数

因为您要退出子流程,所以应该明确地调用_exit