ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:100.43KB ,
资源ID:10557343      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10557343.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(试验六Linux进程编译.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

试验六Linux进程编译.docx

1、试验六Linux进程编译嵌入式操作系统应用开发课程实验报告班 级: * 学 号: * 姓 名:* 指导老师: * 成 绩: 实验六:Linux进程编程一、目的与任务目的:了解掌握操作系统进程的特点与功能,学会借助Linux进程的功能函数进行编程。任务:利用C语言指令编写程序调用进程函数,完成相应功能。二、内容、要求与安排方式1、实验内容与要求:1)通过简单程序编写了解掌握Linux进程编程基本概念、进程关系。2)守护进程与多进程并发案例、守护进程的编写。3)编程验证孤儿进程的产生与回收。4)编程验证僵尸进程的产生与回收。2、实验安排方式:采用1人1组,上机在Linux系统下进行编程实验。三、程

2、序清单编码头文件存放在文件”ch06.h”中:#include #include #include err_exit.h#include #include #include #include #include 添加“err_exit.h”文件获取导致函数调用失败的原因;#include #include #define err_exit(MESSAGE) ( perror(MESSAGE), exit(1) ) (1) 1-1应用程序创建进程的唯一方法是通过现有进程调用folk()函数;注释:用folk创建的子进程基本上是父进程的克隆,所以他包含了父进程的许多特征;#include ch06.

3、hint global = 5;int main(void) pid_t pid; char *string = I am parent; int local = 10; printf( before fork- ); if (pid = fork() 0) /* fork调用失败 */ err_exit(fork); if (pid = 0) /* 子进程 */ string = I am child; printf(%s, my pid=%d: global=%d, local=%dn, string, getpid(), global, local); global +; else /*

4、 父进程 */ printf(%s, my pid=%d: global=%d, local=%dn , string, getpid(), global, local); local+; printf(At join point, %s: global=%d, local=%dn, string, global, local); exit(EXIT_SUCCESS);1-2用刚建立的子进程调用exec()执行一个新程序;#include ch06.hchar *env_init=USER=unknow,PATH=/tmp,NULL;char *path = /home/zkj/book/ch

5、06/echoall;int main(void) pid_t pid; if (pid=vfork() 0) err_exit (vfork error); else if (pid = 0) /* 子进程 */ if (execle(path, echoall, arg1, ARG2, (char *)0, env_init) 0) err_exit(execle error); else if (pid=vfork() 0) err_exit(vfork error); else if (pid = 0) /* 子进程 */ if (execlp(./echoall, echoall,

6、only one arg, (char *)0)= 0) /* 等待子进程 */ pr_exit(status, pid); perror(wait over); exit(EXIT_SUCCESS);(2)守护进程;#include#include#include#include/ open#include#include#include#include#include#define MAXFILE 65535volatile sig_atomic_t _running = 1;int fd;/ signal handlervoid sigterm_handler(int arg) _run

7、ning = 0;int main() pid_t pid; char *buf = This is a Daemon, wcdjn; /* 屏蔽一些有关控制终端操作的信号 * 防止在守护进程没有正常运转起来时,因控制终端受到干扰退出或挂起 * */ signal(SIGINT, SIG_IGN);/ 终端中断 signal(SIGHUP, SIG_IGN);/ 连接挂断 signal(SIGQUIT, SIG_IGN);/ 终端退出 signal(SIGPIPE, SIG_IGN);/ 向无读进程的管道写数据 signal(SIGTTOU, SIG_IGN);/ 后台程序尝试写操作 sign

8、al(SIGTTIN, SIG_IGN);/ 后台程序尝试读操作 signal(SIGTERM, SIG_IGN);/ 终止 / test /sleep(20);/ try cmd: ./test &; kill -s SIGTERM PID / 1 fork child process and exit father process pid = fork(); if(pid 0) exit(0); / 2 create a new session setsid(); / 3 set current path char szPath1024; if(getcwd(szPath, sizeof(

9、szPath) = NULL) perror(getcwd); exit(1); else chdir(szPath); printf(set current path succ %sn, szPath); / 4 umask 0 umask(0); / 5 close useless fd int i; /for (i = 0; i MAXFILE; +i) for (i = 3; i MAXFILE; +i) close(i); / 6 set termianl signal signal(SIGTERM, sigterm_handler); / open file and set rw

10、limit if(fd = open(outfile, O_CREAT|O_WRONLY|O_APPEND, 0600) 0) perror(open); exit(1); printf(nDaemon begin to work., and use kill -9 PID to terminaten); / do sth in loop while(_running) if (write(fd, buf, strlen(buf) != strlen(buf) perror(write); close(fd); exit(1); usleep(1000*1000);/ 1 s close(fd

11、); / print data if(fd = open(outfile, O_RDONLY) 0) perror(open); exit(1); char szBuf1024 = 0; if(read(fd, szBuf, sizeof(szBuf) = -1) perror(read); exit(1); printf(read 1024 bytes:n%sn, szBuf); close(fd); return 0;(3)孤儿进程代码1 #include 2 #include 3 #include 4 #include 5 6 int main() 7 8 pid_t pid; 9 /创

12、建一个进程10 pid = fork();11 /创建失败12 if (pid 0)13 14 perror(fork error:);15 exit(1);16 17 /子进程18 if (pid = 0)19 20 printf(I am the child process.n);21 /输出进程ID和父进程ID22 printf(pid: %dtppid:%dn,getpid(),getppid();23 printf(I will sleep five seconds.n);24 /睡眠5s,保证父进程先退出25 sleep(5);26 printf(pid: %dtppid:%dn,

13、getpid(),getppid();27 printf(child process is exited.n);28 29 /父进程30 else31 32 printf(I am father process.n);33 /父进程睡眠1s,保证子进程输出进程id34 sleep(1);35 printf(father process is exited.n);36 37 return 0;38 (4)僵死进程代码:#include ch06.hint main(void) pid_t pid; char *message; int n; printf(fork program startn)

14、; pid = fork(); switch(pid) case -1: exit(EXIT_FAILURE); case 0: message = This is child; n = 1; break; default: message = This is parent; n = 5; break; puts(message); sleep(n-1); exit(EXIT_SUCCESS);四、实验过程(1)用folk()得到子父进程的关系;用exec()执行一个新的程序进程的不同终止状态(2) 守护进程编写执行结果(3) 孤儿进程(4)僵死进程执行结果;五、实验体会(2)守护进程:在Linux/UNIX系统引导的时候会开启很多服务,这些服务称为守护进程(也叫Daemon进程)。守护进程是脱离于控制终端并且在后台周期性地执行某种任务或等待处理某些事件的进程,脱离终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的中断信息所终止。(3)孤儿进程:一个父进程退出,而它的一个或多个子进程还在进行,那么那些子进程将成了孤儿进程,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。指导教师评语:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1