实验2.2进程的控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机操作系统实训教程实验报告
姓名王学杰专业计算机应用技术班级1362班
课程操作系统实验项目进程的控制
【实验目的】
1、掌握在子进程中使用execl()执行系统命令或调用已编译的其他程序。
2、掌握子进程通过创建子进程完成某项任务的方法。
3、掌握系统调用的exit()和_exit()的使用
【实验要求】
设计程序实现父进程创建多个子进程,子进程中使用execl()函数调用已编译的其他可执行程序。
【实验内容】
程序execl.c的子进程利用execl()函数调用可执行程序段jie.c 程序一/*execl.c*/
# include
# include
# include
void main()
{
int p;
p=fork();
if(p>0)
{
printf("I an parent!\n");
printf("I think the best fruit is apple!!!\n" );
}
printf("\n");
else
{
printf("**********before execute execl**********\n");
execl("./jie","jie",NULL);
perror("execl failed to run jie\n");
printf("**********after execute execl**********\n");
}
}
程序二/*jie.c*/
# include
void main()
{
printf("I an child!\n");
printf("I think the best fruit is watermelon!!!\n");
}
实验相关截图
实验结果
【实验总结】
一、exec函数族
1.exec家族一共有六个函数,分别是:
(1)int execl(const char *path, const char *arg, ......);
(2)int execle(const char *path, const char *arg, ...... , char * const envp[]);
(3)int execv(const char *path, char *const argv[]);
(4)int execve(const char *filename, char *const argv[], char *const envp[]);
(5)int execvp(const char *file, char * const argv[]);
(6)int execlp(const char *file, const char *arg, ......);
其中只有execve是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。
exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。
与一般情况不同,exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,颇有些神似"三十六计"中的"金蝉脱壳"。看上去还是旧的躯壳,却已经注入了新的灵魂。只有调用失败了,它们才会返回一个-1,从原程序的调用点接着往下执行。