fork函数

  • 含义

    fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本

  • 返回值

    有三种不同的返回值:
    1)在父进程中,fork返回新创建子进程的进程ID;
    2)在子进程中,fork返回0;
    3)如果出现错误,fork返回一个负值;

  • 例子

    #include 
    #include 
    int main ()
    {
            pid_t fpid; //fpid表示fork函数返回的值
            int count=0;
            fpid=fork();
            if (fpid < 0)
                    printf("error in fork!");
            else if (fpid == 0) {
                    printf("i am the child process, my process id is %d\r\n",getpid());
                    count++;
            }
            else {
                    printf("i am the parent process, my process id is %d\r\n",getpid());
                    count++;
            }
            printf("统计结果是: %d\r\n",count);
            return 0;
    }
    
    //结果
    i am the parent process, my process id is 27885
    统计结果是: 1
    i am the child process, my process id is 27886
    统计结果是: 1
    
  • 解析

fork函数之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,但只有一点不同,如果fork成功,子进程中fork的返回值是0,父进程中fork的返回值是子进程的进程号,如果fork不成功,父进程会返回错误。可以这样想象,2个进程一直同时运行,而且步调一致,在fork之后,他们分别作不同的工作,也就是分岔了

你可能感兴趣的:(fork函数)