天天看点

linux进程编程(一)-- fork()函数简单应用简介函数原型实例

简介

调用fork()函数会生成一份当前进程的副本。调用fork()的进程为父进程,副本进程为子进程。子进程共享父进程的代码段,并拥有与父进程数据段,堆和栈的副本(与父进程内容相同但空间独立)。

现在系统中应用了写复制机制(Copy-On-Write),调用fork后子进程并没有生成独立的空间,仍然共享父进程资源,只有当子进程尝试修改数据段或堆栈时才会分配新的空间。这样大大提高了fork的效率。

函数原型

#include <unistd.h>
pid_t fork(void);
           

描述

创建一个子进程,这个子进程为当前进程的副本。

返回值

成功时在父进程中返回子进程的pid,子进程中返回0。

失败时在父进程中返回-1,无子进程。

实例

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    pid_t pid;
    int var = ;

    pid = fork();

    if(pid == ) {
        var++;
        printf("I'm child process, pid:[%d], var:%d\n", getpid(), var);
    } else if(pid > ) {
        sleep(); /* 保证父进程在子进程后退出,便于观察var变量的独立性. */
        printf("I'm parent process, pid:[%d], var:%d\n", getpid(), var);
    } else {
        printf("fork error\n");
    }

    return ;
}
           

运行结果:

$ ./a.out 
I'm child process, pid:[], var:
I'm parent process, pid:[], var:
           

继续阅读