在以上程序的基础上修改程序,在父、子进程中分别使用wait()、exit()等系统调用“实现”其同步推进,并获取子进程的ID号及结束状态值。多次反复运行改进后的程序,观察并记录运行结果。
时间: 2024-10-18 10:10:34 浏览: 18
在上面的基础程序上,我们可以通过`wait()`和`waitpid()`函数来实现父子进程之间的同步,同时可以获取子进程的ID和退出状态码。以下是相应的修改版:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define MAX_CHILDREN 2
int main() {
pid_t i, child;
int status;
for (i = 0; i < MAX_CHILDREN; i++) {
if ((pid_t)i == 0) {
printf("I am father\n");
continue;
}
child = fork(); // 创建子进程
if (child == 0) { // 子进程
if ((pid_t)i % 2 == 0) {
printf("I am son %d\n", i);
} else {
printf("I am daughter %d\n", i);
}
exit(0); // 子进程结束
} else if (child > 0) { // 父进程
int child_pid = waitpid(child, &status, 0); // 等待子进程结束并获取状态
if (child_pid == -1) {
perror("Error waiting for child process");
} else {
printf("Child %d exited with status %d\n", child_pid, WEXITSTATUS(status));
}
} else {
perror("Fork failed");
return -1;
}
}
return 0;
}
```
运行此程序后,你会看到父进程等待每个子进程完成并打印出子进程的ID和退出状态。如果程序运行多次,结果将基于随机的进程调度,所以每次的结果可能会有所不同。
阅读全文