标签:
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.
标签:
原文地址:http://www.cnblogs.com/moonlight-fly/p/4378759.html