进程补充|青训营笔记

71 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

孤儿/僵尸/守护

孤儿进程:父进程比子进程先结束,子进程就变成孤儿进程,这时子进程的父进程为init进程孤儿进程需要init进程回收

僵尸进程:子进程结束但父进程并没有用wait系列函数回收该进程,占用的部分资源还没有被回收,则子进程会变成僵尸进程

僵尸进程待父进程结束后转成孤儿进程被init回收

守护进程:后台服务进程,没有终端链接,与终端、会话独立的进程,往往到系统关闭守护进程才关闭,需要与环境隔离,用kill关闭

守护进程创建:

1 创建子进程,退出父进程:生成孤儿进程,交出控制台控制权并将其父进程自动转为1号进程

2 子进程内创建新会话:fork后子进程依然用着父进程的会话期进程组控制终端,要完全独立故新建会话

3 更改当前目录为根目录:进程工作中目录不能更改,为防止文件移动等,需要将目录移至根下

4 重设文件掩码:方便deamon创建文件

5 关闭不需要的文件描述符:节约系统资源

 

线程

线程安全:每次运行结果和单线程结果是一样的

 

保证线程安全:加锁、非阻塞同步(如果出错在解决比如再来一遍)、取消数据共享

临界区和互斥锁的区别

1、临界区在同一进程里线程间的互斥访问;互斥锁可以用于对象进程间或线程间的互斥访问。

2、临界区是非内核对象,只在用户态操作,速度快;互斥锁是内核对象,上下文切换慢。

3、临界区和互斥锁在Windows平台都下可用;Linux下只有互斥锁可用,用锁模拟临界区