实验三 进程与线程

来源:互联网 发布:golang exit status 2 编辑:程序博客网 时间:2024/06/10 00:16

一、实验名称:实验三 进程与线程

二、实验日期:2014/3/13

三、实验目的:

1.  Linux进程

2.  简单的进程同步

四、实验的步骤和方法

 

实验1 Linux进程家族树

 

文件名3-1-1.c:看程序写结果。

要求:

增加1个fork()、2个fork()、多个fork()的结果会怎样?并说明原因,找出规律。

增加1个fork()

3-1-1-1.c

增加2个fork()

3-1-1-2.c

增加n个fork()结果会有2n个进程。

在fork()语句后添加如下2条语句,结果将如何?

printf(“get the child pid: %d\n”,getpid());

printf(“get the parent pid: %d\n”,getppid());

 

3-1-2.c

 

 

init进程

init进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于UNIX的系统(比如 Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之不可用。

 

init进程有两个作用:

① 扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程都会以init作为它们的父进程。

快速执行一下“ps –af”或者top或者gnome-system-monitor命令,可以列出当前运行的进程来。

② 在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。

 

实验2 父子进程同步实验

 

文件名3-2.c:实现子进程先输出”child proc”,父进程后输出” parent proc”。

 

要求:

请总结实现简单的父子进程同步的一般方法。

3-2.c

 

Linux中父子进程同步相关系统调用

1)进程终止

void exit(stat)

主要任务:自我终止,将进程状态变为”僵死”状态,等待父进程用wait系统调用来收集。一般参数可设为0,即exit(0)。

exit()

在执行该函数时,进程会检查文件打开情况,清理I/O缓存,如果缓存中有数据,它们就会写入相应的文件,这样就防止了文件数据的丢失!然后终止进程。

_exit()

在执行该函数时,并不清理标准输入输出缓存,而是直接清除内存空间,当然也就把文件缓存中尚未写入文件的数据给销毁了。由此可见,使用exit()函数更加安全。

 

父进程等待子进程终止

pid_t wait([int*stat_addr]0)

一般参数可设为0,即wait(0)

 

实验3 子进程映像的重新装入

 

创建一进程child.c,功能是输出”I am a child.”,再创建一个父进程3-3.c加载该子进程 。

要求:

理解子进程映像的重新装入。

 

 

Linux中子进程映像的重新装入

Linux提供了一组系统调用exec函数,主要功能是将指定的可执行文件加载到指定的进程映像中,覆盖该进程映像中原有的程序。

此类系统调用有execl()、execle()、execlp()、execv()、execve()、execvp()

本课只介绍execl()和execv()

execl(“路径名/文件名”,0)

execv(file, argv)

参数定义:

char *file 指向文件全名(路径名/文件名)的指针;

char *argv[n]指向命令及参数的指针。

加载成功则直接执行,不返回;不成功返回-1

 

Child.c

创建一个child.c源文件并编译成child执行文件

 

3-3.c

 

实验4 子进程映像的重新装入

 

创建一进程child1.c,再创建一个父进程3-4.c加载该子进程。

要求:

1.  理解子进程映像的重新装入。

2.  掌握exec类函数的用法及功能。

3-4.c:改写子进程的功能为调用键盘命令ls –l,已知该键盘命令的路径与文件名为:/bin/ls

在子进程分支中,用execl加载自己的程序后,添加一条语句如printf(“ok!\n”);结果将如何?

 

Child1.c

 

3-4.c

 

五、实验结果或结论

0 0
原创粉丝点击