次のコードを検討してください。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int g_a = 1;
int main(void){
int l_b = 1;
pid_t p;
if((p = vfork()) < 0){
perror("vfork");
return -1;
}else if(p == 0){
g_a++;
l_b++;
_exit(0); //use the system call _exit
}
printf("ppid = %d,pid = %d,g_a = %d,l_b = %d\n", getppid(), getpid(), g_a, l_b);
return 0;
}
結果は次のとおりです: ppid = 21297,pid = 21553,g_a = 2,l_b = 2
しかし、_exit(0); を置き換えると、return 0; を使用すると、結果は次のようになりました。
ppid = 21297、pid = 21563、g_a = 2、l_b = -1216841009
セグメンテーション違反
セグメンテーション障害があります,_exit と return の違いは何ですか??