码迷,mamicode.com
首页 > 系统相关 > 详细

linux fork

时间:2015-03-30 20:34:49      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

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

截图:

技术分享

原因:如下图解释

技术分享

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

同1一样

技术分享

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

#include <stdio.h>

int main(void)

{

int i;

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

{

fork();

printf("-");

}

return 0;

}

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

结果:

技术分享

原因:

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

技术分享

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

#include <stdio.h>

int main(void)

{

int i;

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

{

fork();

printf("-\n");

}

return 0;

}

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

技术分享

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

技术分享

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

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

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

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

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

linux fork

标签:

原文地址:http://www.cnblogs.com/moonlight-fly/p/4378759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!