fork学习

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
     pid_t pid1;
     pid_t pid2;
     pid1 = fork();
     pid2 = fork();
     printf("pid1:%d, pid2:%d\n", pid1, pid2);
}

执行结果:

pid1:0, pid2:0
pid1:0, pid2:5439
pid1:5438, pid2:0
pid1:5438, pid2:5440

代码解析:

1)fork()函数“调用一次,返回两次”,在父进程中调用一次,在父进程和子进程中各返回一次,fork在子进程中的返回值为0,而在父进程中的返回值是子进程的id;

2)子进程在创建时会复制父进程的当前状态

3)程序运行的结果可能是父子进程交替打印,不同系统实现不一样

4)UNIX将复制父进程的地址空间内容交给子进程,因此子进程有独立的地址空间。在不同的Unix(like)系统下,无法确定fork()之后是子进程先运行还是父进程先运行,依赖于系统的实现;

 

 

 

 

 

 

 

你可能感兴趣的:(fork)