操作系统实验一
1. 实验目的及要求
1.了解进程与程序的区别,加深对进程概念的理解;
2.进一步认识进程并发执行的原理,理解进程并发执行的特点,区别进程并发执行与顺序执行;
2. 实验内容
1.编写一C语言程序(程序名为fork.c),使用系统调用fork( )创建两个子进程。当程序运行时,系统中有一个父进程和两个子进程在并发执行。父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。
2.多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。
3. 实验源码
\# include <stdio.h>
\# include <sys/types.h>
\# include <unistd.h>
int main()
{
int pid1, pid2;
int i;
printf("i'm father\n");
for (i = 0; i < 99; i++)
printf("0");
printf("\n");
if ((pid1 = fork()) < 0)
{
printf("child1 fail create\n");
return 1;
}
else if (pid1 == 0)
{
printf("i'm son\n");
for (i = 0; i < 99; i++)
printf("1");
printf("\n");
return 0;
}
if ((pid2 = fork()) < 0)
{
printf("child2 fail create\n");
return 1;
}
else if (pid2 == 0)
{
printf("i'm daughter\n");
for (i = 0; i < 99; i++)
printf("2");
printf("\n");
return 0;
}
}
4. 实验结果

5. 结果分析
但是我在运行的时候没有出现不同的值,在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。可以通过fork返回的值来判断当前进程是子进程还是父进程。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

浙公网安备 33010602011771号