改写程序:父进程利用fork生成两个子进程A、 B,之后A利用exec族函数运行ls -l, B利用 exec族函数运行ps –a 要求:父进程合理运用wait函数; 三个进程合理运用exit函数。
时间: 2024-03-08 19:48:27 浏览: 62
进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,
5星 · 资源好评率100%
以下是改写后的程序:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
pid_t pid1, pid2;
int status1, status2;
pid1 = fork();
if (pid1 < 0) {
printf("fork error\n");
exit(1);
}
else if (pid1 == 0) {
// 子进程A
execl("/bin/ls", "ls", "-l", NULL);
printf("exec error\n");
exit(1);
}
// 等待子进程A执行完毕
wait(&status1);
pid2 = fork();
if (pid2 < 0) {
printf("fork error\n");
exit(1);
}
else if (pid2 == 0) {
// 子进程B
execl("/bin/ps", "ps", "-a", NULL);
printf("exec error\n");
exit(1);
}
// 等待子进程B执行完毕
wait(&status2);
// 输出子进程的返回值
printf("child A exit status: %d\n", WEXITSTATUS(status1));
printf("child B exit status: %d\n", WEXITSTATUS(status2));
return 0;
}
```
首先,父进程利用`fork`生成两个子进程A、B。然后,子进程A利用`execl`函数运行`ls -l`,子进程B利用`execl`函数运行`ps -a`。父进程利用`wait`函数等待子进程A和B执行完毕,并输出子进程的返回值。所有进程均合理运用`exit`函数。
阅读全文