C 正在结束返回0的子进程

C 正在结束返回0的子进程,c,fork,C,Fork,案例0中的返回0是否正确选择?换句话说,是否返回0调用\u 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", (

案例0中的
返回0
是否正确选择?换句话说,
是否返回0
调用
\u 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;
    }
}
#包括
#包括
#包括
#包括
#包括
内部主(空)
{
printf(“hello_fork!(PID=%lu)\n”,(unsigned long)getpid();
pid_t pid=fork();
开关(pid){
案例1:perror(“fork”);返回1;
案例0:printf(“子:PID=%lu\n”,(无符号长)getpid());
返回0;
默认值:printf(“父:PID=%lu\n\n”,(无符号长)getpid());

if(wait(NULL)从
main
函数调用
return
相当于调用
exit

根据本规范第5.1.2.2.3节:

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

因为您正在退出子进程,所以应该显式调用
\u exit