实验二 -Linux 进程、线程及编程实验二Linux 进程、线程及编程实验一、实验目的1、通过编写一个完整的守护进程,掌握守护进程编写和调试的方法2、进一步熟悉如何编写多进程程序二、实验环境硬件:PC 机一台, JXARM9 -2410 教学实验平台。软件:Windows98/XP/2000 系统,虚拟机环境下的 Linux 系统。三、预备知识1、fork() fork() 函数用于从已存在的进程中创建一个新进程。新进程称为子进程, 而原进程称为父进程。使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等, 而子进程所独有的只有它的进程号、资源使用和计时器等2、exit() 和_exit()的区别_exit() 函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间, 并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit()函数在调用exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的 " 清理 I/O 缓冲 " 一项。3、wait() 和 waitpid() wait() 函数是用于使父进程 (也就是调用 wait()的进程)阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。 如果该父进程没有子进程或者他的子进程已经结束,则wait() 就会立即返回。四、实验内容在该实验中,读者首先创建一个子进程1(守护进程),然后在该子进程中新建一个子进程2,该子进程 2 暂停 10s,然后自动退出,并由子进程 1 收集子线程退出的消息。在这里,子进程1和子进程2 的消息都在系统日志文件(例如“/var/log/messages”,日志文件的全路径名因版本的不同可能会有所不同) 中输出。 在向日志文件写入消息之后,守护进程(子进程1)循环暂停,其间隔时间为10s。五、实验步骤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 (child1 ==...