📜  C中的fork()(1)

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

C中的fork()

在C语言中,fork()是一个系统调用,用于创建一个新的进程(子进程)作为当前进程(父进程)的副本。

语法
#include <unistd.h>

pid_t fork(void);
参数

fork()函数没有任何参数。

返回值

如果调用成功,父进程将会得到子进程的进程ID(PID),而子进程将会得到0。如果发生错误,fork()将会返回一个负值。

使用示例
#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid;

    pid = fork();

    if (pid < 0) {  // fork()调用失败
        printf("Fork failed!");
    } else if (pid == 0) {  // 子进程
        printf("Child process\n");
    } else {  // 父进程
        printf("Parent process, child process ID is %d\n", pid);
    }

    return 0;
}

上面的例子中,父进程执行完fork()后会打印出子进程的进程ID,而子进程则会打印出"Child process"。

注意事项
  • 子进程和父进程是完全独立的进程,它们有各自的内存空间和寄存器状态。
  • 父进程和子进程共享文件描述符,因此在操作文件时需要注意。
  • fork()不会立即复制父进程的所有内容,而是用写时复制(copy-on-write)机制来节省内存。也就是说,直到子进程要修改父进程的某个部分时,操作系统才会在子进程中创建副本。