编写一段程序,使用系统调用fork( )创建两个子进程。 (1)父进程创建子进程1,子进程1创建子进程2,三个进程分别输出一行字符串,其中包含进程各自的pid和父进程id。 (2)父进程创建子进程1和子进程2,三个进程分别输出一行字符串,其中包含进程各自的pid和父进程id。
时间: 2024-10-17 14:10:00 浏览: 93
在Unix/Linux环境中,可以使用`fork()`系统调用来创建新的进程。下面是一个简单的C程序示例,演示了如何按照你的描述创建并控制两个子进程:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define PARENT_PID (getpid()) // 获取当前父进程PID
void child_process(int child_pid) {
printf("Child process %d with parent PID %d\n", child_pid, PARENT_PID);
}
int main() {
pid_t pid;
// 创建子进程1
if ((pid = fork()) == -1) { // 如果fork失败,打印错误并退出
perror("Fork failed");
exit(EXIT_FAILURE);
}
if (pid == 0) { // 子进程1
child_process(pid); // 输出子进程1信息
// 如果需要,子进程1还可以再次fork创建子进程2
// pid = fork();
// 如果子进程2也成功创建,可以在child_process函数里添加相应代码
} else { // 父进程
child_process(pid); // 输出父进程和子进程1的信息
}
return 0;
}
```
在这个程序中,`main()`函数首先调用`fork()`创建子进程1,然后根据返回值判断是父进程还是子进程。如果是子进程,直接调用`child_process()`输出相关信息;如果是父进程,再调用一次`child_process()`,此时传入的是子进程1的PID。
如果子进程1需要创建子进程2,只需在子进程中再次调用`fork()`即可。请注意,每个子进程都有自己的PID,并且它们都会继承父进程的特性,包括环境变量、打开的文件等。
阅读全文