一、实验目的
1.进程的基本概念及进程的结构
2.Linux环境下进程的相关函数的应用
3.守护进程的概念、启动和建立
4.进程控制程序的编写
二、实验任务与要求
1.会用进程操作命令at、ps、top、kill等。
2.应用getpid、getppid、exec函数族、fork、sleep、exit、_exit、warit、waitpid等函数。
3.会编写守护进程。
三、实验工具与准备
计算机PC机,Ubuntu操作系统
四、实验内容与实验步骤
任务1:
(1)学习at命令(定时任务,指定一个时间执行一个任务)的使用。写出at指令的使用格式。在当前时间2分钟后,通过at指令运行命令"ls -l"
(2)使用命令ps,查看linux系统进程,确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。
(3)使用命令top,动态的显示进程信息(键入q退出该命令)。
任务2:程序设计。用execl函数创造进程ls -l,用execvp函数创造进程ps -ef。提示:
显示当前目录下的文件信息可执行以下语句:
(1) execl(“/bin/ls”, “ls”, “-al”, NULL) ;
(2) char *arg[] = {“ps”, “-ef”, NULL};execvp(“ps”, arg);
任务3:execle函数的应用。
要在程序执行时设定环境变量,路径为tmp,用户为liu,执行命令env时把这些环境变量传递给系统,在这一函数中,参数e表示可传递新进程环境变量,参数l表示命令或参数逐个列举,文件查找需给出路径。命令env在"/bin"目录下。把环境变量设定为:
char *envp[]={“PATH=/tmp”,“USER=liu”,NULL};
因而此函数的调用形式为:
execle(“/bin/env”,“env”,NULL,envp);
请编写一程序进行调试。
任务4:execve函数的应用。
要在程序执行时设定环境变量,路径为tmp,用户为liu,执行命令env时把这些环境变量传递给系统,在这一函数中,参数e表示可传递新进程环境变量,参数v表示传递的参数(含命令)为构造指针数组,文件查找需给出路径。命令env在"/bin"目录下。把环境变量设定为:
char *envp[]={“PATH=/tmp”,“USER=liu”,NULL};
参数的构造指针数组为:
char *arg[]={“env”,NULL};
因而此函数的调用形式为:
execve(“/bin/env”,“env”,NULL,envp);
请编写一程序进行调试。
任务5:execvp 函数的应用。
要在程序中执行命令:ps -ef,命令ps在“/bin”目录下。在这一函数中,参数v为构造指针数组,参数p为文件查找方式(不需要给出路径)。因而构造的指针数组为:
char *arg[]={“ps”,“-ef”,NULL};
此函数的调用形式为:
execvp(“ps”,arg);
请编写一程序进行调试。
任务6:调试下列程序,改正程序中少量的错误,写出程序的功能与程序的运行结果。
#include<stdio.h> /*文件预处理,包含标准输入输出库*/
#include<stdlib.h> /*文件预处理,包含system、exit等函数库*/
#include<signal.h> /*文件预处理,包含kill、raise等函数库*/
#include<sys/types.h> /*文件预处理,包含waitpid、kill、raise等函数库*/
#include<sys/wait.h> /*文件预处理,包含waitpid函数库*/
#include<unistd.h> /*文件预处理,包含进程控制函数库*/
int main () /*C程序的主函数,开始入口*/
{
pid_t result;
int ret;
result=fork(); /*调用fork函数,复制进程,返回值存在变量result中*/
int newret;
if(result<0) /*通过result的值来判断fork函数的返回情况,这儿进行出错处理*/
{
perror(