实验2.2进程的控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,从原程序的调用点接着往下执行。

相关文档
最新文档