进程管理实验
实验一:进程控制实验
一、实验目的
加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和
体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过
程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习 Linux 系统中
进程创建与控制有关的系统调用的编程和调试技术。
二、实验内容
参考以上示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进
程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制
ps 命令总在 ls 命令之前执行。
三、实验要求
根据实验中观察和记录的信息结合示例实验和独立实验程序,说明它们反映出操
作系统教材中进程及处理机管理一节讲解的进程的哪些特征和功能?在真实的操作
系统中它是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态
控制的。你对于进程概念和并发概念有哪些新的理解和认识?子进程是如何创建和
执行新程序的?信号的机理是什么?怎样利用信号实现进程控制?根据实验程序、
调试过程和结果分析写出实验报告。
三、实验步骤
1) 打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立以下名为pctl.h 的C语言程序,该程序皆为头文件,该程序代码为:
#include <sys/types.h>
#include <wait.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
int main( )
{
int pid;
pid=fork();/*create child process*/
switch(pid)
{
case -1: /*failed to create*/
printf("fork Fail!\n");
exit(1);
case 0: /* child process */
printf("is child process:son:pid = %d,ppid = %d\n",getpid(),getppid());
execl("/bin/ls","ls","-1",NULL);
printf("exec fail!\n");
exit(1);
default:/* parent process */
printf("is parent process:parent:pid=%d,ppid=%d\n",getpid(),getppid());
while(1)
sleep(1);
exit(0);
}
}
2)输入 make 命令编译连接生成可执行的 pctl 程序 $ g make
gcc -g -c test.c
gcc test.o -o test
./test
修改后继续报错
找到错误完成修改
四、实验结果
1.执行 pctl 程序(注意进程号是动态产生的,每次执行都不相同)
$ ./pctl
2.再次执行带有子进程指定执行命令的 pctl 程序:
$ ./pctl /bin/ls -l
3.查看当前系统进程信息
$ ps -l
六、实验小结
首次使用虚拟机并不太会使用,通过这次试验加深了我对于进程并发执行概念的理解也让我切实了解了并发进程的创建和控制方法以及父子进程间的控制协作关系,在Linux 系统中
进程创建与控制有关的系统调用的编程和调试我仍然有很多不足,代码写的的坎坎坷坷,不太理解。