用fork写一个简单的测试程序,从父进程和子进程中打印信息。信息应该包括父子进程的PID。然后把wait()和exit()系统调用再加进去,使子进程返回退出状态给父进程,并将它包含在父进程的打印信息中。并对运行结果进行分析说明。
时间: 2024-02-12 10:06:31 浏览: 18
好的,以下是用fork写一个简单测试程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int status;
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork Failed");
exit(-1);
} else if (pid == 0) {
printf("This is the child process. PID: %d\n", getpid());
exit(0);
} else {
wait(&status);
printf("This is the parent process. PID: %d, Child PID: %d, Exit Status: %d\n", getpid(), pid, WEXITSTATUS(status));
}
return 0;
}
```
运行结果:
```
This is the child process. PID: 19534
This is the parent process. PID: 19533, Child PID: 19534, Exit Status: 0
```
代码中,我们使用 fork() 函数创建了一个子进程,如果 fork() 返回的值小于0,则表示创建子进程失败,程序退出。如果 fork() 返回的值等于0,则表示当前进程是子进程,我们打印出子进程的PID,并使用 exit() 函数结束子进程。如果 fork() 返回的值大于0,则表示当前进程是父进程,我们使用 wait() 函数等待子进程的终止,获取子进程的退出状态,并打印出父进程的PID、子进程的PID和子进程的退出状态。
可以看到,子进程先于父进程运行,并打印出了子进程的PID,然后子进程结束并返回0。父进程等待子进程结束后,获取子进程的退出状态并打印出父进程的PID、子进程的PID和子进程的退出状态,程序结束。
通过这个简单的测试程序,我们可以了解 fork() 函数的基本用法,以及如何使用 wait() 函数获取子进程的退出状态。