fork产生的变化_无为则无所不为的博客-爱代码爱编程
fork后发生的情况 1
可以确定的是 fork 之前 的 getpid 返回值 是 父进程的 看看 fork 之后 发生了什么变化
。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid = getpid();
printf("father pid is %d\n",getpid());
fork();
printf(" pid is %d\n",getpid());
return 0;
}
可以看到 为啥 fork 之后 只有 一个 printf 而现在多出了一个
。
在fork 之后 会拷贝出子进程出来
。
fork后发生的情况 2
加入返回值 也是会拷贝出两份 但是不确定归属
。
可以确定的是 我们 fork 之后 都会 有父进程 那么可以这么实验
。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid_bf = getpid();
printf("before father pid is %d\n",pid_bf);
pid_t relust =fork();
pid_t pid_af = getpid();
printf("after father pid is %d\n",pid_af);
if(pid_af == pid_bf)
printf(" father fork return data is %d\n",relust);
else
printf(" child fork return data is %d\n",relust);
return 0;
}
可以发现 fork 之后 会产生 子进程 子进程是父进程拷贝出来的 所以 第一个 if fork返回值是子进程的 同时 if 条件语句也是 父进程的 else fork 返回值为零 就只能是子进程的 所以可以证明 fork() >0 是 父进程的条件 fork()==0是子进程的条件
。