欢迎来到天天文库
浏览记录
ID:55155029
大小:4.24 MB
页数:32页
时间:2020-04-29
《嵌入式linux实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、嵌入式操作系统Linux实验报告专业:计算机科学与技术班级:学号:姓名:武易组员:朱清宇实验一Linux下进程的创建一实验目的1.掌握Linux下进程的创建及退出操作2.了解fork、execl、wait、waitpid及之间的关系二实验内容创建进程,利用fork函数创建子进程,使其调用execl函数,退出进程后调用wait或waitpid清理进程。三实验过程1.进程的创建许多进程可以并发的运行同一程序,这些进程共享内存中程序正文的单一副本,但每个进程有自己的单独的数据和堆栈区。一个进程可以在任何时
2、刻可以执行新的程序,并且在它的生命周期中可以运行几个程序;又如,只要用户输入一条命令,shell进程就创建一个新进程。fork函数用于在进程中创建一个新进程,新进程是子进程。原型如下:#include /* 提供类型pid_t的定义 */#include /* 提供函数的定义 */pid_t fork(void);使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间fork系统调用为父子进程返回不同的值,fork调用的一
3、个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:ü在父进程中,fork返回新创建子进程的进程ID;ü在子进程中,fork返回0; ü如果出现错误,fork返回一个负值;用fork创建子进程后执行的是和父进程相同的程序,子进程可以通过调用exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程(例如其main函数)开始执行。调用exec并不创建新进程,进程ID并未改变,只是用另一个新程序替换了当前进程的正文、数
4、据、堆和栈段。exec函数原型execl,execlp,execle,execv,execve和execvp2.进程的退出一个进程正常终止有三种方式:由main()函数返回;调用exit()函数;调用_exit()或_Exit()函数。#include#includeexit:voidexit(intstatus)_exit:void_exit(intstatus)3.wait和waitpid一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为
5、僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集。如果一个进程已经终止,但是它的父进程尚未调用wait或waitpid对它进行清理,这时的进程状态称为僵尸(Zombie)进程。该类进程保留了一定的信息(包括pID,退出状态,运行时间等),需要父进程通过wait/waitpid来取时才释放。如果父进程不调用wait/waitp
6、id的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,如果系统大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。也可以杀死父进程,则Zombie子进程会自动由init进程托管(init会负责清理)。四实验代码#includeintmain(){inti;for(i=3;i>0;i--){printf("Thisisthechild");sleep(2);}return0;}
7、#include#include#include#include#includeintmain(){pid_tpid,pid_w;pid=fork();if(pid<0){perror("forkfailed");exit(1);}if(pid==0){execl("./chpro","chpro",NULL);}else{do{pid_w=waitpid(pid,NULL,WNOHANG);
8、if(pid_w==0){printf("childprocesshasnoexited");sleep(1);}}while(pid_w==0);if(pid_w==pid)printf("Getchild%d",pid_w);elseprintf("someerroroccured.");}return0;}五实验结果实验二Linux下shell程序设计一实验目的掌握Linux下shell程序的设计方法,脚本文件的编写方法二实验内容1.给shell脚本
此文档下载收益归作者所有