linux fork

1. 编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。多执行几次,观察并记录屏幕上的显示结果,分析原因, 写入实验报告。

截图:

clip_image002

原因:如下图解释

clip_image004

2. 修改上述程序,每一个进程循环显示一句话。子进程显示'daughter…'及'son…',父进程显示 'parent…',多执行几次,观察并记录屏幕上的显示结果,分析原因, 写入实验报告。

同1一样

clip_image006

3. 利用vi编辑器,创建源代码文件ft1.c,内容如下

#include <stdio.h>

int main(void)

{

int i;

for(i=0; i<2; i++)

{

fork();

printf("-");

}

return 0;

}

观察并记录屏幕上的显示结果,分析原因,写入实验报告。

结果:

clip_image008

原因:

这时,打印出的“-”被执行了8次,可以从下图(手画)得到解释:

clip_image010

4. 修改ft1.c,内容如下

#include <stdio.h>

int main(void)

{

int i;

for(i=0; i<2; i++)

{

fork();

printf("-\n");

}

return 0;

}

注意代码的修改,多执行几次,观察并记录屏幕上的显示结果,分析原因,写入实验报告。

clip_image012

打印出6次,理由是加上\n后,printf被立刻打印,所以子进程不会复制父进程的缓冲内容;即只打印6次,分别出处如下:

clip_image014

5. 总结性解释说明:为什么fork()调用一次,返回两次

在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,

fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id,

因为子进程没有子进程,所以其fpid为0.

转载于:https://www.cnblogs.com/moonlight-fly/p/4378759.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值