第五次实验报告_第1页
第五次实验报告_第2页
第五次实验报告_第3页
第五次实验报告_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五次实验报告首先,实验的目的:1.掌握与流程相关的基本概念;2.掌握Linux下的进程结构;3.Linux下的主进程创建和进程管理;4、掌握创建相关系统调用的Linux流程;5.掌握守护进程的概念;6.掌握守护进程的启动方法;7.掌握守护进程的输出和建立它的方法;8、学会编写多进程程序;9、学会写守护程序。二、实验内容:1.该实验有三个进程,其中一个是父进程,另外两个是由父进程创建的子进程。其中一个子进程运行“ls -l”指令,另一个子进程在暂停5秒后异常退出。父进程不会阻塞自身,而是等待子进程的退出信息。收集信息后,父进程返回。2.在这个实验中,读取器首先建立一个守护进程,然后在守护进程中创建一个新的子进程。子进程暂停10秒,然后自动退出,守护进程收集关于子进程退出的信息。这里,子进程和守护进程的退出消息以/var/log/messages 形式输出。在子进程退出后,守护进程周期暂停10秒。三、实验步骤:1、(1)写代码:#包括#包括#包括#包括#包括int main(空)pid_t child1,child2,child;/*创建两个子流程*/child 1=fork();child 2=fork();/*子流程1的错误处理*/if(child1=-1 )perror(child 1 fork);出口(1);/*调用子流程1中的execlp函数*/否则如果(child1=0 )printf(“In child 1:执行ls-1 n”);if(execlp(ls , ls ,-l ,NULL)0)perror( child 1 exec LP );/*子流程2的错误处理*/if(child2=-1 )perror(child 2 fork);出口(1);/*在子流程2中暂停5秒钟*/否则如果(child2=0 )printf(In child2:睡眠5秒,然后退出 n );睡眠(5);退出(0);/*正在等待父进程中的子进程2退出*/否则printf(“在父进程中: n”);做child=waitpid(child2,NULL,WNOHANG);if(child=0 )printf( child 2进程尚未退出! n );睡眠(1); while(child=0);if(child=child2)printf(“获取儿童2 n”);其他printf(出现错误! n );(2)首先在主机上编译和调试程序:根localhost进程# gcc exc . co exc(3)确保没有编译错误后,交叉编译程序:根localhost进程# arm-Linux-gcc exc . co exc(4)将生成的可执行程序下载到目标板上运行。2、(1)写代码:/*exc2.c实验2源代码*/#包括#包括#包括#包括#包括#包括#定义MAXFILE 65535int main(空)pid_t child1、child2int I;child 1=fork();/*创建子流程1*/if(child1=-1 )perror(child 1 fork);出口(1);else if(child1 0)退出(0);/*打开日志服务*/openlog(exc2_info ,LOG_PID,LOG _ DAEMON);/*以下步骤是编写守护程序的常规步骤*/setsid();chdir(/);umask(0);对于(I=0;i MAXFILE(I)关闭(I);/*创建子流程2*/child 2=fork();if(child2=-1 )perror(child 2 fork);出口(1);否则如果(child2=0 )/*在日志中写入字符串*/syslog(LOG_INFO,“child2将睡眠10秒”);睡眠(10);syslog(LOG_INFO,“child2将退出!”);退出(0);否则waitpid(child2,NULL,0);syslog(LOG_INFO,“child1注意到child2已退出”);/*关闭日志服务*/close log();而(1)睡眠(10);(2)由于一些嵌入式开发板没有系统日志服务,读者可以在主机上编译和运行。根localhost进程# gcc exc 2 . co exc 2(3)运行程序。(4)等待10秒钟后,以root用户身份查看“/var/log/messages”文件。(5)使用PSef | grepexc2查看守护进程是否正在运行。四、实验结果:1、根(无)1#。/exc在child1:中执行ls-1在child1:中执行ls-1在child2:中睡眠5秒钟,然后退出总计57-根根14443 2006年1月31日exc-2006年1月29日出口-2006年1月29日叉根13956-rwxr-xr-x 1根根13999 2006年1月30日总计57-根根14443 2006年1月31日exc-2006年1月29日出口-2006年1月29日叉根13956-rwxr-xr-x 1根根13999 2006年1月30日在父进程中:child2进程尚未退出!child2进程尚未退出!child2进程尚未退出!child2进程尚未退出!child2进程尚未退出!生孩子22,(1)在“/var/log/messages”中,有类似以下的信息:1月31日13:59:11本地主机交换2 _信息5517:儿童2将睡眠10秒1月31日13:59:21本地主机交换2 _信息5517:儿童2将退出!1月31日13:59:21本地主机交换2 _信息5516:儿童1注意到儿童2退出从时间戳可以清楚地看出,child2确实暂停了10秒。(2)使用命令PSef | grepexc 2查看以下结果:根5516 1 0 13:59?00:00:00 ./exc2显然,exc2确实一直在运行。五、实验结果:通过这一部分的实验,我了解了进程的基本概念,以及在Linux下进程的基本结构、模式和类型,以及Linux进程管理。进程是L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论