MST

星途 面试题库

面试题:C语言中Linux进程创建性能优化之fork函数基础

在Linux环境下使用C语言进行进程创建,通常会用到fork函数。请阐述fork函数的作用,并且说明fork函数调用成功后,父子进程的执行顺序是怎样的,以及如何区分父子进程。
30.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

fork函数的作用

fork函数用于创建一个新进程,称为子进程。它将当前进程(父进程)复制一份,子进程几乎与父进程完全相同,包括代码段、数据段、堆、栈等。子进程和父进程都从fork函数调用处继续执行,但它们拥有独立的地址空间。

父子进程的执行顺序

在fork函数调用成功后,父子进程的执行顺序是不确定的。这取决于操作系统的调度算法。操作系统会根据自身的调度策略,在适当的时候分别调度父进程和子进程执行,它们可能交替执行,也可能某一个进程先执行一段时间后另一个进程才得到执行机会。

区分父子进程

fork函数调用成功后,会返回两个值:

  • 在父进程中,fork函数返回子进程的进程ID(PID)。因为父进程可能有多个子进程,通过返回的子进程PID可以对不同子进程进行管理。
  • 在子进程中,fork函数返回0。所以通过判断fork函数的返回值,就可以区分父子进程。例如:
#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid;
    pid = fork();
    if (pid > 0) {
        // 父进程代码
        printf("I am parent process, my pid is %d, child pid is %d\n", getpid(), pid);
    } else if (pid == 0) {
        // 子进程代码
        printf("I am child process, my pid is %d\n", getpid());
    } else {
        // fork失败
        perror("fork");
    }
    return 0;
}

在上述代码中,通过判断pid的值来确定是父进程还是子进程在执行相应的代码块。