除去僵尸进程实验报告.doc
综合性实验报告
专业年级:班级:
课程名称
Linux/UNIX网络编程
指导教师
本组成员
学号姓名
实验地点
实验时间
工程名称
除去僵尸进程
实验类型
综合性
实验目的
1.了解僵尸进程产生的三个条件,并分析程序是否能产生僵尸进程。
2.了解除去僵尸进程的四种方法,并熟练应用。
3.wait〔〕函数除去程序中的僵尸进程。
总体设计〔设计原理、设计方案及流程等〕
设计原理
一个已经终止但是其父进程尚未对其进行善后处理的进程称为僵尸进程,既子进程结束,父进程未调用exit〔〕,父进程没有处理SIGCHLD信号,要想除去僵尸进程需要破坏三个条件中的一个,父进程可以通过调用wait()函数获得子进程的终止函数,从而除去僵尸进程。本实验利用课本上“14.2效劳器与单客户的连接处理”程序,除去程序中的僵尸进程。
设计方案及流程
〔1〕在linux的虚拟机上编写并调试程序。
〔2〕用ps-a-opid,ppid,state,command命令查看是否产生了僵尸进程
〔3〕在程序中添加wait〔〕函数并调试运行
〔4〕再次用ps-a-opid,ppid,state,command命令查看是否消除了僵尸进程
实验步骤〔包主要步骤、代码分析等〕
〔1〕在linux的虚拟机上翻开终端用vim编译器编写效劳器端的文件server.c,调试并用gcc-oserverserver.c编译程序。编译成功之后用./server命令运行程序。
〔2〕翻开另一个终端用vim编译器编写客户端文件client.c,调试并用gcc-oclientclient.c编译程序。编译成功后用./client127.0.0.1运行程序〔因为客户端的输入用汉语的话一直输出的是乱码,所以客户端输出的是英文〕如下列图所示:
再翻开一个终端输入ps-a-opid,ppid,state,command命令查看进程的情况,如下列图所示,第一个是客户端效劳器都在运行,第二个是客户端已经断开连接,可以看出程序中已经产生僵尸进程。
在server.c的程序中参加wai()函数,如下列图:
再次运行server.c和client.c文件,并用ps-a-opid,ppid,state,command命令查看进程的状态,如下列图可知程序中已经没有僵尸程序。
〔6〕截图,撰写实验报告,另附实验代码client.cserver.c。
结果分析与总结
本实验老师在课堂上详细讲解了除去僵尸进程的四种方法:父进程结束exit〔〕型号,利用wait()函数,利用waitpid()函数,让父进程死亡,子进程成为孤儿进程。我利用的是wait()函数让父进程接受SIGCHLD信号,在做到客户端的时候程序出现了某种bug无法用汉语输出,否那么会出现乱码。所以效劳器端是汉语输出,客户端是英文输出。在做实验的过程中应该细心和耐心,调试程序时应该仔细,最后希望老师满意。
教师签名:
年月日