📌  相关文章
📜  在C中使用fork()从同一父进程创建n子进程(1)

📅  最后修改于: 2023-12-03 15:37:35.151000             🧑  作者: Mango

在C中使用fork()从同一父进程创建n个子进程

fork()函数是用来创建一个新的进程的系统调用。在父进程中调用fork()函数后,操作系统会创建一个新的子进程,该子进程与父进程几乎完全相同,包括代码、数据、打开的文件等等。但子进程有自己的PID(进程ID)并且拥有自己的内存空间。

使用fork()函数可以在一个C程序中创建多个进程,从而实现并发执行。

下面是一个示例程序,使用fork()函数创建n个子进程:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
    int n = 5;  // 创建5个子进程
    pid_t pid;

    for (int i = 0; i < n; i++) {
        pid = fork();  // 调用fork()函数创建子进程

        if (pid == -1) {
            printf("Fork failed\n");  // 如果fork()函数返回-1,表示创建子进程失败
            break;
        }
        else if (pid == 0) {
            printf("Child process %d (PID %d) created\n", i+1, getpid());  // 子进程输出信息
            break;
        }
        else {
            printf("Parent process %d (PID %d) created child process %d (PID %d)\n", getpid(), pid, i+1, pid);  // 父进程输出信息
        }
    }

    return 0;
}

代码解释:

  • 程序中使用一个循环来创建多个子进程,循环次数由变量n指定。
  • 调用fork()函数会返回两次,一次在父进程中返回子进程的PID,一次在子进程中返回0。
  • 父进程中记录子进程的PID并输出相应信息。
  • 子进程中输出自己的信息。

代码执行结果:

Parent process 3291 (PID 3290) created child process 1 (PID 3291)
Child process 1 (PID 3291) created
Parent process 3292 (PID 3290) created child process 2 (PID 3292)
Child process 2 (PID 3292) created
Parent process 3293 (PID 3290) created child process 3 (PID 3293)
Child process 3 (PID 3293) created
Parent process 3294 (PID 3290) created child process 4 (PID 3294)
Child process 4 (PID 3294) created
Parent process 3295 (PID 3290) created child process 5 (PID 3295)
Child process 5 (PID 3295) created

可以看到,父进程创建了5个子进程,而每个子进程都输出了自己的信息。

使用fork()函数时需要注意以下几点:

  • 父进程和子进程都继续执行fork()函数调用后的代码,因为fork()函数是一个系统调用,会返回两次。
  • 如果fork()函数返回-1,表示创建子进程失败。
  • fork()函数创建的子进程是父进程的副本,它们的数据和代码是一模一样的,因此需要在子进程中添加代码来区分父进程和子进程的行为。
  • 父进程和子进程都需要做错误处理,以防止出现意外情况。