您的当前位置:首页正文

Linux中的fork函数

2024-11-07 来源:个人技术集锦

Linux中的fork函数

1. fork()函数说明

  • 函数定义:
    int fork();
  • 函数使用后会创建一个新的进程:
    使用该函数的进程为新的进程的父进程,而新创建的进程为原来进程的子进程.
  • int返回值的含义:
  • 0:创建子进程成功,当前为子进程,子进程因为没有下面没有子进程了,所以返回值为0
  • >0:子进程创建成功,当前为父进程,返回值为子进程的ID
  • -1:创建失败

2. fork()函数的使用

  • 使用fork创建两个子进程,父进程输出’a’,子进程分别输出’b’,‘a’.
#include <stdio.h>
#include <unistd.h>
int main()
{
    int p1, p2;
    while((p1 = fork()) == -1); /* 创建子进程p1 */
    if(p1 == 0) putchar('b'); /* 子进程p1创建成功 */
    else
    {
        while((p2 = fork()) == -1); /* 创建子进程p2 */
        if(p2 == 0) putchar('c'); /* 子进程p2创建成功 */
        else putchar('a'); /* 父进程执行 */
    }
    return 0;
}

bac

acb

从进程并发执行来看,因为并发进程是抢占式争夺系统资源,所以abc字符串的全排列的所有情况都有可能.

  • 在调用fork()函数时,函数会将除了头文件外所有资源(包括局部变量和全局变量)复制一份,存到另一个存储空间.两者之间互不干扰.
  • 在调用fork()函数时,如果采用了 printf 输出显示而且并未换行,则创建后的子进程也会将 printf 的输出复制了一份,所有子进程输出的时候会多输出上次输出的内容,因为 printf 是采用行刷新机制.
Top