📅  最后修改于: 2023-12-03 15:14:24.953000             🧑  作者: Mango
在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)机制来节省内存。也就是说,直到子进程要修改父进程的某个部分时,操作系统才会在子进程中创建副本。