利用fork()函数创建一个进程,形成的父进程和子进程分别输出自己的pid和ppid(ppid为当前进程的父进程id)
时间: 2024-11-25 22:08:38 浏览: 13
Linux环境下的Fork使用
在Unix/Linux系统中,`fork()` 函数是一个用于创建新进程的基本工具。当父进程调用 `fork()` 时,它会复制自身并返回两个进程ID:一个是原进程自身的ID(不变),另一个是新生成子进程的ID(对于子进程是它的初始PID)。如果调用成功,子进程将拥有一个新的副本,共享相同的地址空间和文件描述符,而父进程则获得子进程的副本。
以下是简化的步骤说明:
1. 父进程(parent process)调用 `fork()` 函数。
- 如果返回值是0,那么这个新的进程就是子进程,此时应立即调用 `exec*()` 家族函数替换自身(例如 `execvp()`),以避免成为孤儿进程(即没有直接父进程管理的进程)。
- 如果返回值不是0,而是正数,那就是父进程本身,这时它可以记录子进程的PID。
2. 子进程(child process)执行流程:
- 子进程不需要再次调用 `fork()`,因为它已经通过父进程获得了新的身份。
- 子进程可以简单地打印出自己的PID和父进程的PID(通过 `getppid()` 函数获取)。
下面是一个简单的C语言示例:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
printf("我是子进程,我的PID是 %d,父进程的PID是 %d\n", getpid(), getppid());
} else if (child_pid > 0) { // 父进程
printf("我是父进程,我创建了一个子进程,其PID是 %d\n", child_pid);
} else { // fork失败
perror("Fork failed");
return 1;
}
return 0;
}
```
当你运行这个程序,你会看到父进程和子进程各自输出它们的PID和父进程的PID。
阅读全文