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