2022年实验二Linux进程、线程及编程 .pdf
《2022年实验二Linux进程、线程及编程 .pdf》由会员分享,可在线阅读,更多相关《2022年实验二Linux进程、线程及编程 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验二Linux 进程、线程及编程实验一、实验目的1、通过编写一个完整的守护进程,掌握守护进程编写和调试的方法2、进一步熟悉如何编写多进程程序二、实验环境硬件: PC 机一台, JXARM9 2410 教学实验平台。软件: Windows98/XP/2000 系统,虚拟机环境下的Linux 系统。三、预备知识1、fork() fork() 函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。使用fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级
2、、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等2、exit() 和_exit() 的区别_exit() 函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit() 函数在调用exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的清理 I/O 缓冲 一项。3、wait() 和 waitpid() wait()函数是用于使父进程(也就是调用wait()的进程) 阻塞,直到一个子进程结束或
3、者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则wait() 就会立即返回。四、实验内容在该实验中,读者首先创建一个子进程1(守护进程) ,然后在该子进程中新建一个子进程 2,该子进程2 暂停 10s,然后自动退出,并由子进程1 收集子线程退出的消息。在这里,子进程1 和子进程 2 的消息都在系统日志文件(例如“/var/log/messages” ,日志文件的全路径名因版本的不同可能会有所不同)中输出。 在向日志文件写入消息之后,守护进程(子进程 1)循环暂停,其间隔时间为10s。五、实验步骤名师资料总结 - - -精品资料欢迎下载 - - - - - -
4、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 1分析下面的代码,注意它的运行会产生几个进程以及掌握fork() 调用的具体过程。/* multi_proc_wrong.c */ #include #include #include #include #include int main(void) pid_t child1, child2, child; /*创建两个子进程*/ child1 = fork(); child2 = fork(); /*子进程 1 的出错处理 */ if (chi
5、ld1 = -1) printf(Child1 fork errorn); exit(1); else if (child1 = 0) /* 在子进程1 中调用 execlp()函数 */ printf(In child1: execute ls -ln); if (execlp(ls, ls, -l, NULL) 0) printf(Child1 execlp errorn); if (child2 = -1) /* 子进程 2 的出错处理 */ printf(Child2 fork errorn); exit(1); else if( child2 = 0 ) /* 在子进程2 中使其暂停
6、5s*/ printf(In child2: sleep for 5 seconds and then exitn); sleep(5); exit(0); else /*在父进程中等待两个子进程的退出*/ printf(In father process:n); child = waitpid(child1, NULL, 0); /* 阻塞式等待*/ if (child = child1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - -
7、- - - printf(Get child1 exit coden); else printf(Error occured!n); do child = waitpid(child2, NULL, WNOHANG);/* 非阻塞式等待*/ if (child = 0) printf(The child2 process has not exited!n); sleep(1); while (child = 0); if (child = child2) printf(Get child2 exit coden); else printf(Error occured!n); return 0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年实验二Linux进程、线程及编程 2022 实验 Linux 进程 线程 编程
限制150内