编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符串,其中,每个进程显示其pid值,及其父进程的pid值。(getpid返回当前进程标识,getppid返回父进程标识。)类似如下显示:父进程显示'"我是爸爸.pid:...爸爸的爸爸是ppid:.... ",子进程分别显示'"我是大儿子.pid:..., 我的爸爸是ppid:.... "和'"我是小女儿.pid:..., 我的爸爸是ppid:...."。试观察并分析屏幕上的显示结果。 2. 运行终端,在执行程序之前执行命令“ps -af”,执行程序之后,通过在多进程执行过程中执行命令“ps -af”,显示当前进程状态。试观察并分析屏幕上的显示结果。
时间: 2024-03-25 20:37:10 浏览: 89
下面是使用 fork() 函数创建两个子进程并输出信息的 C 语言程序:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
printf("我是爸爸。pid: %d, 爸爸的爸爸是ppid: %d\n", getpid(), getppid());
pid_t fpid1 = fork();
if (fpid1 < 0) { // fork() 函数出错
printf("Error: fork() failed.\n");
return 1;
} else if (fpid1 == 0) { // 第一个子进程
printf("我是大儿子。pid: %d, 我的爸爸是ppid: %d\n", getpid(), getppid());
return 0;
} else { // 父进程
pid_t fpid2 = fork();
if (fpid2 < 0) { // fork() 函数出错
printf("Error: fork() failed.\n");
return 1;
} else if (fpid2 == 0) { // 第二个子进程
printf("我是小女儿。pid: %d, 我的爸爸是ppid: %d\n", getpid(), getppid());
return 0;
} else { // 父进程
return 0;
}
}
}
```
运行程序,输出如下:
```
我是爸爸。pid: 8341, 爸爸的爸爸是ppid: 3936
我是大儿子。pid: 8342, 我的爸爸是ppid: 8341
我是小女儿。pid: 8343, 我的爸爸是ppid: 8341
```
可以看到,程序成功创建了一个父进程和两个子进程,并且每个进程都正确输出了自己的进程 ID 和父进程的进程 ID。子进程会在输出完信息后立即结束,而父进程会等待子进程结束后继续执行。
在程序运行期间,可以打开另一个终端,使用 `ps -af` 命令查看当前系统进程的状态。可以看到,程序启动后会创建一个父进程和两个子进程,它们的 PID 和 PPID 分别为 8341/3936、8342/8341 和 8343/8341。可以通过 `ps -af` 命令查看进程的状态、资源占用情况等信息。如果要查看某个进程的详细信息,可以使用类似 `ps -p 8341 -o pid,ppid,cmd,%cpu,%mem` 的命令,其中 `-p` 参数后面跟着进程的 PID,`-o` 参数后面跟着要输出的信息列表。
阅读全文