操作系统进程控制实验报告.
操作系统实验报告
实验题目:进程控制
专 业 计算机科学与技术
学 生 姓 名
班 级 学 号
指 导 教 师
指 导 单 位 计算机学院
日 期 2014年11月13日
教师评语
教师签名:
年 月 日成绩评定备 注一、实验目的
1.学习和了解进程控制的基本和常用的系统调用
fork??wait??sleep??exit??exec??等等
2. 查看 /usr/src/include/sched.h中的task_struct 数据结构,并分析Linux 操作系统进程状态。
3.通过进程创建的应用实例,深刻理解进程创建的过程
将以下例题输入运行,并分析运行结果
程序例题1
#include
#include
#include
int main(void)
{
pid_t pid;
int data=5;
if((pid=fork())<0)
{
printf("fork error\n");
exit(0);
}
else if(pid==0)
{
data--;
printf("child\'s data is:%d\n",data);
exit(0);
}
else
{
printf("parent\'s data is:%d\n",data);
}
exit(0);
}
程序例题2
用fork创建一个子进程,由其调用execve启动shell命令ps查看系统当前的进程信息
#include
#include
#include
main( )
{
??pid_t pid;
??char *path="/bin/ps";
??char *argv[5]={ "ps","-a","-x",NULL};
printf(揜un ps with exec"ve by child process:\n?;
牋if((pid=fork( ))<0)
{
printf(揻orxeck error!?;
牋exit(0);
}
else if (pid==0)
{
牋if(execve(pat揻orh,argv,0)<0)
牋 {
牋牋 printf(揻ork error!?;
牋牋 exit(0);
xecve(p牋 }
printf(揷hild is ok!\n?;
exit(0);
}
wait( );
printf(?xecit is ok!\n?;
exit(0);
}
3 .创建一个共享内存,实现一个生产者进程写共享内存,一个消费者进程读共享内存,并在写前读后输出写和读的内容。
4.创建一个共享文件,实现一个写者进程写文件,2个读者在写者写后分别读出文件的内容,并给出读后评价。
二、实验指导
Linux中与进程控制相关的几个主要系统调用
名/格式/参数功??能返回值的解释fork( )、vfork( ) 创建一个字进程 对父进程:返回子进程号
对子进程:返回0
错误:返回-1 #include
execve(char *file,char **argv,char **envp) 用指定程序覆盖当前程序代码 正确:0
错误:-1 #include
#include
pid_t wait(int *statloc) 等待进程终止 正确:子进程的ID
错误:-1 getpid( )、getppid( ) 获得进程号 #include
void exit(int status) 进程正常结束
三、实验步骤(附程序原码)
实验一:创建文件wang.c,编写C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父,子三进程并发进行,父亲进程执行时屏幕显示“parent”,儿子进程执行时屏幕显示“son”,女儿进程执行时屏幕显示“daugher”。程序如下:
(进程一)#inclu