在C语言中,fork()函数是用于创建新进程的函数。这个函数会创建一个与原进程几乎完全相同的进程,新进程(子进程)会继承父进程的代码、堆、数据、环境变量、打开的文件描述符等。然而,父、子进程的代码和数据并不是完全相同的,因为它们运行在不同的内存空间上。
fork 函数的原型在unistd.h头文件中声明,它的返回值是一个整数,有以下几种情况:
- 在父进程中,fork函数返回新创建子进程的进程ID。
- 在子进程中,fork函数返回0,这是因为对于子进程来说,它没有创建任何其它进程,所以它的返回值是0。
- 如果在调用fork时出现错误,它返回一个负值。
下面是一个简单的fork函数示例:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0)
{
// 如果fork失败,输出错误
fprintf(stderr, "Fork failed");
return 1;
} else if (pid == 0) {
// 这是子进程
printf("This is child process with PID %d\n", getpid());
} else {
// 这是父进程
printf("This is parent process with PID %d and child with PID %d\n", getpid(), pid);
}
return 0;
}
运行结果如下:
这个程序首先尝试创建一个新的进程。如果成功,它会输出父进程和子进程的进程ID。如果尝试创建新进程时出现错误,程序会输出错误信息。