四川大学 操作系统原理 第二次 实验报告 shell编程

  • 格式:doc
  • 大小:389.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

(学生打印后提交)

实验名称:shell编程

实验时间: 10 年04月 21 日

实验人员:(姓名)(学号)(年级)

实验目的:1.熟悉使用Linux下的软件开发工具,如gcc

2.熟练使用man帮助手册

3.学习使用Linux的系统调用,对进程进行管理和完成进程之间的通信(如用信号和管道进

行进程间通信)

4.理解并发程序中的同步问题

实验环境: linux

实验步骤:

1. 用帐户root登录,密码123456

2. 自己用学号建立目录,把源文件拷入目录中

3. 阅读关于fork,exec,wait,exit,pipe系统调用的man帮助手册

4. 编译程序fork.c并运行,观察结果,观察进程

5.编译程序pipe.c并运行,观察结果

6.阅读关于函数sigaction,tcsetpgrp和setpgid的man帮助手册

7.编译程序signal.c并运行,观察结果,观察进程

8.编译程序process.c并运行,观察结果,观察进程

9.写实验总结

实验陈述:

1、基础知识:

✧什么是系统调用:系统调用是UNIX操作系统核心提供给用户程序使用的操作系统服

务,系统调用主要提供用户程序对文件进行读写,进程的创建,删除和控制以及数

据的输入/输出等。

✧简述fork调用:用fork()创建一个新的进程,成为原先进程的子进程,原先进程是

父进程。

✧如何实现进程间的通信: UNIX进程通信方式有信号,管道,消息,共享存储区和信

号量。

✧如何实现进程间的连接:可以利用管道和socket

2、写出下列函数的原型

fork: int fork();

signal: int signal(int sig,int func);

pipe:int pipe(int fildes[2]);

tcsetpgrp: int tcsetpgrp(int fildes,pid_t pgid_id)

3、运行和观察结果

✧fork.c

简述结果(不是执行结果):与执行ls -l/相同

程序中如何区分父进程和子进程:通过fork的返回值pid的值的大小来区分子进程和父进程,如果pid的值等于0,表明是子进程,如果>0表明是父进程,如果小于0,表明子进程创建失败

pipe.c

简述结果(不是执行结果):相当于将ls –l /etc/内容重定向到一个地方(程序中是缓冲),然后用more命令以页为单位在屏幕上显示出重定向的内容

vp(prog2_argv[0],prog2_argv)(第56行)是否执行,如果没有执行是什么原因:会执行,父进程创建子进程时后父进程和子进程的执行所随机的,所以只要第二次子进程创建成功,都会执行这一句话。

✧signal.c

✧简述结果(不是执行结果):不断的输出父进程和子进程的ID号,父进程是3693,

子进程是3694

怎样让函数

ChildHandle

r执行?当

子进程接收到信号的时候就执行ChildHandler函数

✧process.c

简述结果(不是执行结果):显示parent和child进程的进程号,其中parent 的进程号为5193,child的进程号为5194,然后使子进程所在的进程组成为前台

进程组,然后执行vi

进程

列表

中有

个./p

rocess,区别在哪里:进程中有两个,一个所主进程,在后台等待输入,子进程在前台调用vi

1.杀死主进程后,出现什么情况:子进程也结束了

实验总结:

1.通过本次实验,了解了linux下的软件开发工具gcc的具体使用方法

2.学会用man帮助手册,查看一些系统调用的具体内容

3学习使用Linux的系统调用,如用信号和管道,对进程进行管理和完成进程之间的通信