



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告(学生打印后提交)实验名称: shell编程基础 实验时间: 2012 年4月14日实验人员:赵俊杰_(姓名)(学号)2010(年级)实验目的:学习使用Linux的系统调用,对进程进行管理和完成进程之间的通信(用信号和管道进行进程间通信)理解并发程序中的同步问题熟悉使用Linux下的软件开发工具gcc熟练使用man帮助手册实验环境: linux 实验步骤:1. 把源文件(程序)拷入Linux系统的一个目录中 2. 阅读关于fork、exec、wait、exit、pipe系统调用的man帮助手册 3. 编译程序fork.c并运行,观察结果,分析程序。 4. 试编辑程序pipe.c并运行,
2、观察结果,分析程序。(程序要求及提示见pipe.c源文件) 5.阅读关于函数sigaction、tcsetpgrp和setpgid的man帮助手册 6.编译程序signal.c并运行,观察结果,分析程序。 7.编译程序process.c并运行,观察结果,分析程序。 实验陈述:1、基础知识: 什么是系统调用:Linux所有系统资源被内核管理,任何涉及访问系统资源的用户请求或应用程序请求,必须由内核代码处理。出于安全考虑,用户进程是不能随意访问内核代码的 Linux提供系统调用,让用户进程能调用内核代码的运行。这些系统调用允许用户操纵进程、文件和其他系统资源,从用户级切换到内核级。系统调用与普通函
3、数调用的区别在于系统调用的执行会引起特权级的切换,是一种受约束的、为切换到保护核心的“函数调用”。 简述fork调用:用它创建一个新的进程,成为原先进程的子进程,原先进程是父进程。子进程实际上是原先进程的一个副本,即子进程拥有和父进程相同代码段的内存块。父子进程在fork语句后都要继续同时执行,它们通过fork的返回值转向不同的代码分支,对子进程的返回值是0,对父进程fork的返回值是子进程的进程号(大于0)。出错返回-1。 如何实现进程间的通信: 进程间的通信可以利用管道和信号机制实现。 信号机制:信号允许一个进程在某一事件发生时与另一个进程(接收者进程)通信,该进程把事件对 应的消息传递给
4、接收者进程,接收者进程收到一个信号时,会采取某些相应的动作。信号的值表明发生了哪种事件。管道机制:管道允许一条命令的标准输出作为一条命令的标准输入,允许同一个系统上的两个相关的进程进行通信(典型情形是父子进程),而且进程的通信是单向的。 如何实现进程间的连接: 2、 写出下列函数的原型fork: pid=fork() sigaction: int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); pipe: int pipe(int pipefd2); tcsetpgrp: int tcs
5、etpgrp(int fd, pid_t pgrp) 3、运行和观察结果 fork.c 简述程序实现的功能:程序用创建子进程的方式实现了ls lh / 这个命令的功能,即列出根目录下文件的详细信息. 运行结果如下:zjjubuntu:/program$ ./fork总用量 96Kdrwxr-xr-x 2 root root 4.0K 2012-04-14 00:26 bindrwxr-xr-x 3 root root 4.0K 2012-04-23 01:18 bootdrwxr-xr-x 2 root root 4.0K 2011-08-19 05:18 cdromdrwxr-xr-x 16
6、 root root 4.0K 2012-04-23 06:59 devdrwxr-xr-x 128 root root 12K 2012-04-23 06:59 etcdrwxr-xr-x 3 root root 4.0K 2011-08-19 05:21 homelrwxrwxrwx 1 root root 33 2012-04-23 01:18 initrd.img - boot/initrd.img-2.6.32-41-genericlrwxrwxrwx 1 root root 33 2012-04-14 00:30 initrd.img.old - boot/initrd.img-2
7、.6.32-40-genericdrwxr-xr-x 20 root root 12K 2012-04-23 01:17 libdrwx- 2 root root 16K 2011-08-19 05:14 lost+founddrwxr-xr-x 3 root root 4.0K 2012-04-14 01:38 mediadrwxr-xr-x 3 root root 4.0K 2012-03-23 05:01 mntdrwxr-xr-x 2 root root 4.0K 2011-08-19 05:36 optdr-xr-xr-x 168 root root 0 2012-04-23 06:
8、58 procdrwx- 10 root root 4.0K 2011-08-19 07:41 rootdrwxr-xr-x 2 root root 4.0K 2012-04-14 00:26 sbindrwxr-xr-x 2 root root 4.0K 2009-12-05 13:55 selinuxdrwxr-xr-x 2 root root 4.0K 2010-08-16 02:32 srvdrwxr-xr-x 12 root root 0 2012-04-23 06:58 sysdrwxrwxrwt 16 root root 4.0K 2012-04-23 06:59 tmpdrwx
9、r-xr-x 10 root root 4.0K 2010-08-16 02:32 usrdrwxr-xr-x 15 root root 4.0K 2010-08-16 02:48 varlrwxrwxrwx 1 root root 30 2012-04-23 01:18 vmlinuz - boot/vmlinuz-2.6.32-41-genericlrwxrwxrwx 1 root root 30 2012-04-14 00:30 vmlinuz.old - boot/vmlinuz-2.6.32-40-generic 程序中如何区分父进程和子进程: Pid=fork(). 如果pid=0
10、,则为子进程。如果pid!=0,为父进程。 pipe.c 简述程序实现的功能 程序利用管道的形式实现了 ls l /etc | more 的功能。将前一个命令的标准输出当做后一个指令(more) 的标准输入 分页显示/etc目录下文件的详细信息。程序结果如下:zjjubuntu:/program$ ./pipe总用量 1112drwxr-xr-x 3 root root 4096 2012-04-14 00:30 acpi-rw-r-r- 1 root root 2981 2010-08-16 02:34 adduser.confdrwxr-xr-x 2 root root 4096 2012
11、-04-14 02:10 alternatives-rw-r-r- 1 root root 395 2010-03-04 18:29 anacrontabdrwxr-xr-x 6 root root 4096 2010-08-16 02:40 apmdrwxr-xr-x 3 root root 4096 2011-08-19 07:43 apparmordrwxr-xr-x 7 root root 4096 2012-04-14 00:31 apparmor.ddrwxr-xr-x 5 root root 4096 2012-04-14 00:32 apportdrwxr-xr-x 6 roo
12、t root 4096 2011-08-19 05:31 apt-rw-r- 1 root daemon 144 2010-03-04 18:35 at.denydrwxr-xr-x 3 root root 4096 2011-08-19 07:43 avahi-rw-r-r- 1 root root 1939 2010-04-18 18:51 bash.bashrc-rw-r-r- 1 root root 51761 2010-04-14 06:32 bash_completiondrwxr-xr-x 2 root root 4096 2012-04-14 00:32 bash_comple
13、tion.d-rw-r-r- 1 root root 344 2010-04-22 07:04 bindresvport.blacklist-rw-r-r- 1 root root 321 2010-03-22 10:50 blkid.conflrwxrwxrwx 1 root root 15 2011-08-19 07:30 blkid.tab - /dev/.blkid.tabdrwxr-xr-x 2 root root 4096 2010-08-16 02:48 bluetooth-rw-r-r- 1 root root 7135 2010-04-15 04:34 bogofilter.
14、cfdrwxr-xr-x 2 root root 4096 2010-08-16 02:46 bonobo-activation-rw-r-r- 1 root root 33 2010-08-16 02:50 brlapi.key-More- execvp(prog2_argv0,prog2_argv)是否执行,如果没有执行是什么原因: 该指令执行more 的指令 signal.c 简述程序实现的功能: 程序 利用信号,实现了进程通信。子程序结束,将SIGCHLD信号返回给父进程,父进程再做出相应的处理。程序结果如图: 怎样让函数ChildHandler执行? 在另外一个窗口下,执行kill 命令,杀死子进程,父进程通过sigaction()系统调用,执行ChildHandler函数。 process.c 简述程序实现的功能: 设置子程序为前台进程组,控制终端调用vi ,输入。 父程序等待子程序结束后,设为前台进程组,控制终端,回显刚才的输入 。 程序结果如下:zjjubuntu:/program$ ./processID(parent=2110)ECH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建消防知识培训课件
- Nimotuzumab-powder-生命科学试剂-MCE
- DB61T 557.6-2012 富硒肉羊生产技术规程
- 小学教师资格证考试试题及答案
- DB61T 493-2010 城镇企业职工基本养老保险行政争议受理
- 云南省鲁甸县第二中学2025年数学高三上期末统考模拟试题
- 苏轼《浣溪沙》课件
- 四川省任隆中学2025-2026学年数学高三第一学期期末学业质量监测试题
- 山西省长治市第九中学2025年数学高三第一学期期末质量跟踪监视试题
- 预备党员考试试题及答案2025
- 高一化学第一学期教学进度计划(新人教版普通高中化学必修第一册教学计划)
- 现代智力七巧板赛前培训
- C型钢检验报告
- 国航特殊餐食代码表
- 人教版高中美术《书法》选修第一课“汉字与书法文化”教案
- 多媒体技术与应用ppt课件(完整版)
- 冀教版七年级上册英语全册教案(教学设计)
- 免疫细胞治疗中心管理制度和质量保障措施
- 《中国人民警察警歌》歌词
- 《航空动力装置》课件绪论
- 科技文献检索与利用
评论
0/150
提交评论