当前位置:文档之家› 实验2.2进程的控制

实验2.2进程的控制

计算机操作系统实训教程实验报告
姓名王学杰专业计算机应用技术班级1362班
课程操作系统实验项目进程的控制
【实验目的】
1、掌握在子进程中使用execl()执行系统命令或调用已编译的其他程序。

2、掌握子进程通过创建子进程完成某项任务的方法。

3、掌握系统调用的exit()和_exit()的使用
【实验要求】
设计程序实现父进程创建多个子进程,子进程中使用execl()函数调用已编译的其他可执行程序。

【实验内容】
程序execl.c的子进程利用execl()函数调用可执行程序段jie.c 程序一/*execl.c*/
# include <unistd.h>
# include <stdio.h>
# include <errno.h>
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 <stdio.h>
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,从原程序的调用点接着往下执行。

相关主题