第五次实验报告
更新时间:2024-03-02 16:35:02 阅读量: 综合文库 文档下载
第五次实验报告
一、实验目的:
1、掌握进程相关的基本概念; 2.掌握Linux 下的进程结构;
3、掌握Linux 下进程创建及进程管理;
4、掌握Linux 下进程创建相关的系统调用; 5、掌握守护进程的概念;
6、掌握守护进程的启动方法; 7、掌握守护进程的输出及建立方法; 8、学会编写多进程程序; 9、学会编写守护进程。
二、实验内容: 1、该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s 之后异常退出,父进程并不阻塞自己,并等待子进程的退出信息,待收集到该信息,父进程就返回。
2、在该实验中,读者首先建立起一个守护进程,然后在该守护进程中新建一个子进程,该子进程暂停10s,然后自动退出,并由守护进程收集子进程退出的消息。在这里,子进程和守护进程的退出消息都在“/var/log/messages”中输出。子进程退出后,守护进程循环暂停,其间隔时间为10s。 三、实验步骤:
1、(1)编写代码: #include
pid_t child1,child2,child; /*创建两个子进程*/ child1 = fork(); child2 = fork();
/*子进程1的出错处理*/ if( child1 == -1 ){ perror(\exit(1);
}
/*在子进程1中调用execlp函数*/
else if( child1 == 0 ){
printf(\if(execlp(\perror(\}
/*子进程2的出错处理*/ if( child2 == -1 ){ perror(\exit(1); }
/*在子进程2中使其暂停5s*/ else if( child2 == 0 ){
printf(\sleep(5); exit(0); }
/*在父进程中等待子进程2的退出*/ else{
printf(\
do{
child = waitpid( child2, NULL, WNOHANG ); if( child ==0 ){
printf(\sleep(1);
}
}while( child == 0 ); if( child == child2 ) printf(\else
printf(\} }
(2)首先在宿主机上编译调试该程序:
[root@localhost process]# gcc exc.c –o exc
(3)在确保没有编译错误后,使用交叉编译该程序:
[root@localhost process]# arm-linux-gcc exc.c –o exc
(4)将生成的可执行程序下载到目标板上运行。 2、(1)编写代码: /*exc2.c实验二源码*/ #include
pid_t child1,child2;
int i;
child1 = fork(); /*创建子进程1*/
if( child1 == -1 ){ perror(\exit(1); }
else if( child1 > 0 ) exit( 0 ); /*打开日志服务*/
openlog(\/*以下几步是编写守护进程的常规步骤*/ setsid();
chdir( \
umask( 0 );
for( i = 0 ; i < MAXFILE ; i++ ) {
close( i ); }
/*创建子进程2*/ child2 = fork(); if( child2 == -1 ){ perror(\exit(1); }
else if( child2 == 0 ){ /*在日志中写入字符串*/
syslog( LOG_INFO, \sleep(10);
syslog( LOG_INFO, \exit(0); }
else{
waitpid( child2, NULL, 0);
syslog( LOG_INFO , \/*关闭日志服务*/ closelog(); while(1){ sleep(10); } }
}
(2)由于有些嵌入式开发板没有syslog服务,读者可以在宿主机上编译运行。
[root@localhost process]# gcc exc2.c –o exc2
(3)运行该程序。
(4)等待10s后,以root 身份查看“/var/log/messages”文件。 (5)使用ps –ef|grep exc2 查看该守护进程是否在运行。 四、实验结果: 1、[root@(none) 1]# ./exc
In child1: execute 'ls -l'
In child1: execute 'ls -l'
In child2: sleep for 5 seconds and then exit total 57
-rwxr-xr-x 1 root root 14443 Jan 31 2006 exc -rwxr-xr-x 1 root root 13512 Jan 29 2006 exit -rwxr-xr-x 1 root root 13956 Jan 29 2006 fork -rwxr-xr-x 1 root root 13999 Jan 30 2006 waitpid total 57
-rwxr-xr-x 1 root root 14443 Jan 31 2006 exc -rwxr-xr-x 1 root root 13512 Jan 29 2006 exit -rwxr-xr-x 1 root root 13956 Jan 29 2006 fork -rwxr-xr-x 1 root root 13999 Jan 30 2006 waitpid In father process:
The child2 process has not exited! The child2 process has not exited! The child2 process has not exited! The child2 process has not exited! The child2 process has not exited! Get child2
2、(1)在“/var/log/messages”中有类似如下的信息显示:
Jan 31 13:59:11 localhost exc2_info[5517]: child2 will sleep for 10s Jan 31 13:59:21 localhost exc2_info[5517]: child2 is going to exit!
Jan 31 13:59:21 localhost exc2_info[5516]: child1 noticed that child2 has exited
从时间戳里清楚地看到child2 确实暂停了10s。
(2)使用命令ps –ef|grep exc2可看到如下结果: root 5516 1 0 13:59 ? 00:00:00 ./exc2 可见,exc2 确实一直在运行。
五、实验心得: 通过本节实验,我理解了进程的基本概念及Linux下进程的基本结构、模式与类型以及Linux 进程管理。进程是Linux 中程序运行和资源管理的最小单位,对进程的处理也是嵌入式Linux应用编程的基础,所以必须掌握它。并且掌握了fork 函数和exec 函数族和他们的区别。同时学会了Linux 守护进程的编写,包括守护进程的概念、编写守护进程 的步骤以及守护进程的出错处理。
正在阅读:
第五次实验报告03-02
强制拆除违法建筑行为定性与规范12-10
浅析歌剧的起源以及早期的代表作品03-29
中国数控机床行业市场研究报告04-16
高考数学最易失分知识点总结03-19
通信行业客户维护工作计划06-03
公司企业邮箱名录08-11
产品安装使用说明书03-08
- 秦皇岛律师:盗窃案成功辩护词
- A Compare of Chinese and English Compounds
- 3203外科护理学历年真题
- 大数据对科学哲学的新挑战
- 38标热力施工组织设计
- 电火花放电加工工艺
- 神机妙算 软件 高级操作
- 黔东南州2012年教师素质提升工程培训学习心得
- 2012年自主招生安徽录取名单
- 北师大课标版七年级数学下册教案平方差公式(一)
- 教科版小学五年级语文上册期末试题
- 高级财务会计大作业 (2)
- 如何在自然课中搞好探究性实验教学
- 建筑材料习题答案 - 图文
- 2019年2018入党思想汇报1500字-word范文(7页)
- 《古诗三首》(1)
- 面对繁多的一种坚持:展望大学中的道德教育
- 恶劣天气下如何保障行车安全
- “一比一访三走进”教学设计
- 吉林省工业旅游发展研究
- 实验
- 报告
- 11级学习部整理毒理学知识点总结
- 2015教师考核细则
- 商业中心、写字楼和酒店式公寓总承包工程施工组织设计 - 图文
- 2011.11.29招标文件湖州市中心医院污水设备采购项目 - 图文
- 终身学习与职业发展
- 《我的中国梦》读后感
- 电器小区促销活动 - 阅海万家活动方案
- 中专 英语(4)期末试卷和答案
- 何中文 51单片机和lcd1602的万年历设计 - 图文
- 电脑公司实习日记精选17篇
- 课程设计备选题目
- 第3-5章的练习题
- 小学二年级英语教学工作总结
- 拓展心得 - 个人与团队共赢
- 牛舍设计方案
- 大班幼儿观察记录
- 振动分析与实验基础实验指导书1
- “十二五”前期-重大项目表
- 基础护理学第五版 第8章 生命体征评估与护理 习题及答案
- 第五章 例题与解析(操作题)