linux fork

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

截图:函数

clip_image002

缘由:以下图解释3d

clip_image004

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

同1同样进程

clip_image006

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

#include <stdio.h>get

int main(void) it

{io

int i;cli

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.

相关文章
相关标签/搜索