#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int a;/*未初始化全局变量默认0.*/
int main(void)
{
pid_t pid;
/*标记父进程的pid区别子进程。
系统资源不够可能fork失败
fork(); 写时复制,只读共享。*/
pid = fork();
/*此处父进程pid返回子进程pid>0;子进程pid返回=0;*/
if (pid == -1) {
perror("fork");
exit(1);
}
/*父进程执行pid>0*/
if (pid > 0) {
a = 9;
/*pid>0 父进程才执行这里
成功创建后父进程先返回,之后子进程返回.
所以打印两次*/
printf("I am father My pid = %d, My childd = %d, a = %d\n",
getpid(), pid, a);
}else if (pid == 0) {
printf("I am child, My pid = %d, My ppid = %d, a = %d\n",
getpid(), getppid(), a);
}
sleep(1);
/*不休眠子进程的pid显示1? 如果不休眠父进程提前退出,
子进成为孤儿进程由1号(init)进程管理。
所以子进程pid=1;*/
return 0;
}
/*父进程返回值为子进程pid>0,子进程返回pid=0,pid<0失败.*/