1、1实验报告 6课程名称: Linux 程序设计 实验名称: Linux 进程控制 学生姓名: 班级: 学号: 指导老师: 钱振江 成绩: 一、实验目的1掌握进程的创建,用 fork 产生的子进程与父进程的关系;2掌握 exec 函数族的应用。二、实验任务与要求1熟悉父进程创建一个子进程,父进程与子进程之间的数据结构与变量存放的问题;2子进程与父进程间的关系;3execl 、execv 函数的应用;4execlp 函数的应用;5execle 函数的应用;三、实验工具与准备计算机 PC 机,Linux Ubuntu 操作系统四、实验步骤与操作指导1.调试下列程序。步骤 1 用 vi 编辑程序 6-
2、1.c。rootlocalhost root# vi 6-1.c#include #include #include #include int main(void)pid_t pid;char *message;int n;pid = fork();if (pid 0; n-) printf(message);sleep(1);return 0;步骤 2 用 gcc 编译程序。用 gcc 的”-o”选项,将 6-1.c 程序编译成可执行文件 6-1,输入如下:rootlocalhost root#gcc 6-1.c o 6-1步骤 3 运行程序。编译成功后,执行程序 6-1.问题思考:(1)
3、从程序的运行结果分析程序的并发执行情况。(2) 从程序的运行结果分析,你如何理解子进程与父进程共用同一个数据结构,但在不同的空间内?(3) 如果在子进程中给变量 n 赋值 6,在父进程中给变量 n 赋值 3,请分析程序运行的结果。(4) 把程序中的“sleep(1);”去掉,程序的运行结果如何改变?请记录实验结果并分析。2程序设计。设计一个程序,产生一个子进程,在父进程内调用终端命令 vi 编辑一个文本文件,在子进程内测试系统与 baidu 的网络连通情况,在父进程中观察 fork 函数的返回值与子进程号有什么关系。当子进程退出后,父进程才退出。3调试下列程序,观察程序的运行结果,并说明程序的
4、功能和过程。#include /*文件预处理,包含标准输入输出库*/#include /*文件预处理,包含 system、exit 等函数库*/#include /*文件预处理,包含 fork、getpid、getppid 函数库*/#include /*文件预处理,包含 fork 函数库*/int main () /*C 程序的主函数,开始入口 */ pid_t result;result=fork(); /*调用 fork 函数,返回值存在变量 result 中*/int newret;if(result=-1) /*通 过 result 的 值 来 判 断 fork 函 数 的 返 回
5、情 况 , 这 儿 先 进 行 出 错 处 理 */perror(“创建子进程失败“);exit(0);else if (result=0) /*返回值为 0 代表子进程*/printf(“返回值是:%d,说明这是子进程!n 此进程的进程号(PID)是:%dn 此进程的父进程号(PPID)是:%dn“,result,getpid(),getppid();execl(“/bin/ls”,”ls”,”-l”,0); /*调用 ls 程序,显示当前目录下的文件信息 */else /*返回值大于 0 代表父进程*/3sleep(10);printf(“返回值是:%d,说明这是父进程!n 此进程的进程号(PID)是:%dn 此进程的父进程号(PPID)是:%dn“,result,getpid(),getppid();4五、实验结果记录5六、实验结果分析