fork

create process

fork 被调用一次,可以返回两次。

在调用fork之后的代码会执行两次,一次在父进程中执行,返回的是创建成功的子进程的Id,一次是在子进程中执行,返回的是0;如果出现错误,fork返回的是负值。

 1/*linux下:*/
 2 
 3#include <stdio.h>
 4#include <unistd.h>
 5 
 6int main() {
 7    pid_t pid;
 8    pid = fork();
 9    if(pid  == 0) //返回子进程
10    {
11        printf("child pid: %d\n", getpid());
12    } else {
13        printf("pid: %d\n", pid);//父进程中返回子进程的pid
14        printf("father pid: %d\n", getpid());
15    }
16}
1pid: 2876921
2father pid: 2876920
3child pid: 2876921

fork的两种用法

  1. 父进程希望复制自己,使父子进程同时执行不同的代码段。

    比如在网络服务程序中,父进程等待客户端的服务请求。当请求到达时,父进程调用fork()使子进程处理此请求;而父进程继续等待下一个请求。

  2. 一个进程要执行不同的程序

    这个在shell下比较常见,这种情况下, fork()之后一般立即接exec函数。