最近读 APUE,APUE 7.3 节中说,main 函数 return 相当于
exit(main(argc, argv))
但是在实践程序 8-2 时候出现了问题
下面的程序编译后执行会 core-dump
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int glob = 6;
int
main(void)
{
int var;
pid_t pid;
var = 88;
printf("before vfork\n");
if ((pid = vfork()) < 0) {
printf("vfork error");
exit(-1);
} else if (pid == 0) {
/* 子进程 */
glob++;
var++;
return 0;
//exit(0);
}
printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var);
return 0;
//exit(0);
}
但是将 return 改为 exit 后却不会
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int glob = 6;
int
main(void)
{
int var;
pid_t pid;
var = 88;
printf("before vfork\n");
if ((pid = vfork()) < 0) {
printf("vfork error");
exit(-1);
} else if (pid == 0) {
/* 子进程 */
glob++;
var++;
//return 0;
exit(0);
}
printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var);
//return 0;
exit(0);
}
请问是什么样的原因导致第一段程序会出 core-dump 呢?
http://man7.org/linux/man-pages/man2/vfork.2.html
直接return是一个undefined行为. 发生core-dump是正常的.