Linux 父进程需要创建3个子进程,但不创建孙子进程

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. 绘制进程家族树

进程家族树

  • 19
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值