课程名称:C/C++气象数据中心实战,手把手教你做工业级项目
课程章节:2-8linux多进程
主讲老师: 吴从周
课程内容:
认识linux三个特别的进程,0号,1号和2号。
通过ps命令对linux系统中的不同进程进行查看认识和区分。
通过编写程序,运用fork函数进一步加深对于多进程中的子进程和父进程的特点理解。
通过实例演示,讲述子进程和父进程相互之间的关系,以及在实际运用中如何解决僵尸进程的方法。
课程收获:
1.linux中具有三个特别的进程,分别是0号idle进程,1号systemed(init)进程,2号kthreadd进程。其中,0号进程是系统创造的第一个进程,将会加载系统,进而演变成为1号和2号进程,1号进程用于系统的初始化,是其他用户进程的祖先,例如网络服务进程,防火墙服务等,3号进主要负责所有的内核线程,他是内核的守护进程,始终运行在内核空间, 负责全部内核线程的调度和管理。
2.fork函数,一个现有的进程调用函数fork时,会创建一个新的进程,这个即为子进程,原有进程为父进程。
子进程和父进程继续执行fork函数的代码。即fork函数调用一次,会返回两次,子进程返回0,父进程返回子进程的进程ID号,当fork函数调用失败时会返回-1,一般为内存空间不足等极端情况。
3.父进程和子进程是相互独立的进程,在父进程中的操作是不会改变子进程中的参数,子进程只是在创建时复制了父进程的数据空间,并不是两者进行了共享。且子进程和父进程的执行顺序是不确定的,取决于操作系统的算法。
4.僵尸进程和孤儿进程,在实应用中,僵尸进程虽然不占用系统资源,但是他的进程号会被保留,积累过多时可能会导致系统崩溃。僵尸进程是已经结束的进程,但是没有被父进程回收导致的。孤儿进程是指父进程先退出,由1号进程完成其状态收集工作的进程,无危害。
5 处理僵尸进程的方法 通过代码在父进程中忽略SIGCHLD信号,此时内核会自动回收子进程。其次,可以在父进程文件中添加等待代码,最后常见的使用是设置SIGCHLD信号处理函数,在函数中调用wait,不耽搁父进程的操作。
共同学习,写下你的评论
评论加载中...
作者其他优质文章