fork()函数的作用是创建一个子进程。pid = fork();
代码示例如下:

int main()
{
    pid_t pid;
    int x = 1;

    pid = fork(); //创建子进程
    if (pid == 0) {  /* Child */
        printf("child : x=%d\n", ++x); 
        exit(0);
    }
    printf("pid=%d\n", pid);
    /* Parent */
    printf("parent: x=%d\n", --x); 
    exit(0);
}

结果:

parent: x=0
pid=29254
child : x=2

fork()进程有以下几个特点:

  1. 调用1次,返回2次。 一次是在父进程中执行,一次是在刚创建的子进程中执行。 pid为0,表示当前在子进程中。
  2. 并发执行。 父进程和子进程是并发运行的独立进程。 内核以任意方式交替执行,可能会先执行父进程,也可能会先执行子进程。 程序员应该避免猜测谁先执行来做一下逻辑处理。
  3. 拥有相同且独立的地址空间: 刚fork出的子进程和父进程拥有相同的用户栈、堆,变量。但他们相互独立的。 例如例子中:输出x的变量值,child自增1与parent自减1互不影响。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐