什么是fork函数?

fork()是什么?

Fork

定义

系统调用fork()用于创建进程。这个函数没有参数,返回进程ID。创建的进程是调用者的子进程,当这个子进程被创建之后,两个进程都会执行fork()的下一条指令。通过fork()的返回值,可以分辨出父进程与子进程。

  • 返回值为负数表示子进程创建失败;

  • 返回值为0表示当前是被创建出来的子进程;

  • 返回值为正数的话,这个数是子进程的PID。

子进程会拷贝父进程的地址空间,即两个进程拥有着独立的地址空间。

举例

例一

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

#define   MAX_COUNT  200
#define   BUF_SIZE   100

void  main(void)
{
     pid_t  pid;
     int    i;
     char   buf[BUF_SIZE];

     fork();
     pid = getpid();
     for (i = 1; i <= MAX_COUNT; i++) {
          sprintf(buf, "This line is from pid %d, value = %d\n", pid, i);
          write(1, buf, strlen(buf));
     } 
}

如果父进程执行成功,Unix会:

  • 为子进程拷贝一份一样的地址空间;

  • 两个进程各自从fork()的下一条语句开始执行。

因为两进程独立,所以一个进程内部变量的改变不影响另一个,即使变量名相同。

例二

调用fork()之后,其返回值pid在父进程是子进程的PID,在子进程是0。因此按之后的逻辑,父进程将执行ParentProcess()而子进程去执行ChildProcess()

Reference

Last updated