请帮我写一个基于linux平台的c语言代码,要求是4) 请查阅man手册,实现以下场景:父进程创建多个子进程,阻塞自身至指定子进程结束?
时间: 2024-03-26 16:36:04 浏览: 28
以下是基于Linux平台的C语言代码实现父进程创建多个子进程,并阻塞自身至指定子进程结束:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define NUM_CHILDREN 3 // 子进程数量
int main() {
pid_t child_pid[NUM_CHILDREN];
int status;
for (int i = 0; i < NUM_CHILDREN; i++) {
child_pid[i] = fork();
if (child_pid[i] == 0) { // 子进程
printf("Child process %d is running.\n", i+1);
sleep(5); // 子进程运行5秒
printf("Child process %d is done.\n", i+1);
exit(0);
}
else if (child_pid[i] == -1) { // fork失败
perror("fork");
exit(1);
}
}
// 父进程阻塞至指定子进程结束
int chosen_idx = 1; // 假设要等待第一个子进程结束
printf("Parent process is waiting for child process %d with pid %d.\n", chosen_idx+1, child_pid[chosen_idx]);
waitpid(child_pid[chosen_idx], &status, 0);
printf("Child process %d with pid %d has ended.\n", chosen_idx+1, child_pid[chosen_idx]);
return 0;
}
```
代码解释:
1. 定义了一个常量`NUM_CHILDREN`表示子进程的数量。
2. 使用`fork()`函数创建子进程,并将子进程的PID保存在数组`child_pid`中。
3. 子进程输出运行信息,然后通过调用`exit()`函数结束进程。
4. 父进程通过调用`waitpid()`函数阻塞自身至指定子进程结束,阻塞时会输出等待信息。
5. 当指定的子进程结束后,父进程会输出相应的信息,然后正常结束进程。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)