实验三 进程与线程
来源:互联网 发布: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
五、实验结果或结论:
- 实验三 进程与线程
- Linux进程与线程实验
- Linux进程线程实验
- android进程与线程详解三:AsyncTask
- android进程与线程详解三:AsyncTask
- android进程与线程详解三:AsyncTask
- android进程与线程详解三:AsyncTask
- android进程与线程详解三:AsyncTask
- C#关于进程与线程(三)
- Linux进程与线程之三
- python ----进程与线程(三)
- 【Linux之路】进程与线程(实验)
- 进程与线程(三)进线程的优先级操作
- 进程和线程实验总结
- 进程线程互斥锁实验总结
- 进程与线程线程
- 操作系统实验三 进程调度
- 进程、线程、程序三者的区别与联系
- 树状数组 HDU1166
- ArcGIS Android 10.1.1 API开发资源
- jarx与webservice很好地作用
- 手游公司日记(7)
- Linux上部署SVN_个人心得
- 实验三 进程与线程
- 2014-4-20
- HDOJ 2043 密码
- 实验四 进程间通信(上)
- 使用R完成均值检验
- Tomcat 生产服务器性能优化
- Algorithms: Treap树
- 实验五 进程间通信(中)
- apache commons Logging与Log4j结合的使用