用C语言编程实现父进程fork子进程的功能。 调用fork命令,并在子进程中打印子进程pid; 在子进程中sleep 10秒; i. 若父进程不愿等待这10秒而直接退出,编写程序直接打印父进程id,程序名myshell_nowait,观察进程的僵尸状态; ii. 若父进程必须等待子进程结束,打印父进程id并调用waitpid打印子进程id, 程序名myshell_wait;
时间: 2023-06-13 16:07:17 浏览: 147
下面是用C语言编写的两个程序:myshell_nowait和myshell_wait,分别实现了父进程不等待子进程和父进程等待子进程的功能。
myshell_nowait程序:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
printf("fork error\n");
return -1;
} else if (pid == 0) {
printf("child pid: %d\n", getpid());
sleep(10);
printf("child process exit\n");
} else {
printf("parent pid: %d\n", getpid());
printf("parent process exit\n");
}
return 0;
}
```
myshell_wait程序:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int status;
pid = fork();
if (pid < 0) {
printf("fork error\n");
return -1;
} else if (pid == 0) {
printf("child pid: %d\n", getpid());
sleep(10);
printf("child process exit\n");
} else {
printf("parent pid: %d\n", getpid());
waitpid(pid, &status, 0);
printf("child pid: %d exit\n", pid);
printf("parent process exit\n");
}
return 0;
}
```
两个程序的区别在于myshell_wait使用了waitpid函数等待子进程结束并获取子进程的状态,而myshell_nowait直接退出了父进程。执行myshell_wait程序时,可以看到父进程会等待子进程结束并打印出子进程的pid,而执行myshell_nowait程序时,如果不等待子进程,子进程将变成僵尸进程。
阅读全文