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;
}
}
答案 0 :(得分:3)
从return
函数调用main
等同于调用exit
。
来自C standard的第5.1.2.2.3节:
如果
main
函数的返回类型是兼容的类型int
,从初始调用到main
函数的返回是 相当于使用返回的值调用exit
函数main
函数作为参数
因为您要退出子流程,所以应该明确地调用_exit
。