1. 要求

如果父进程需要创建3 子进程,但不创建孙子进程。请编写程序,并画出进程家族树。 (进程家庭树中填写进程 PID,使用 getpid, getppid)。

2. 分析

2.1 getpid、getppid

getpid是获取当前进程的ID号,getppid是获取当前进程的父进程的ID号。

2.2 不让子进程再生成进程

  • 换句话说就是只让父进程创建进程,所以使用一个判断语句:if (pid == getpid()) // 只能是父进程才能创建子进程,这里的pid应当为父进程ID。
  • 题目要求只要三个子进程,所以循环三次:for (i = 0; i < 3; ++i) // 生成三个进程

3. 代码

#include <stdio.h>
#include <unistd.h>

int main(void)
{
	int pid = getpid(); // 获取当前进程 作为以下创建进程的父进程
	int i;
	for (i = 0; i < 3; ++i) // 生成三个进程
	{
		if (pid == getpid()) // 只能是父进程才能创建子进程
		{
			fork();
		}
	}
	printf("pid = %d, ppid = %d\n", getpid(), getppid());
	sleep(1); // 为防止父进程提前结束,睡眠等待,且这样输出工整
}

4. 运行截图

进程运行
注:我是用ubuntu,内核版本5.3

5. 绘制进程家族树

进程家族树

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐