Loading

操作系统实验一

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返回一个负值;

posted @ 2020-12-25 23:05  桥木  阅读(741)  评论(0)    收藏  举报