僵尸进程和孤儿进程有什么区别?
子进程已退出但父进程尚未 wait 回收时成为僵尸,只保留 PID 与退出信息;父进程先退出而子进程仍运行时成为孤儿,通常被系统指定的 Subreaper/PID 1 接管并最终回收。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
子进程已退出但父进程尚未 wait 回收时成为僵尸,只保留 PID 与退出信息;父进程先退出而子进程仍运行时成为孤儿,通常被系统指定的 Subreaper/PID 1 接管并最终回收。
root 指定根文件系统设备或标识,rootwait 等待异步出现的根设备,console 决定内核控制台,init 指定首个用户态程序。根挂载失败还取决于存储驱动、文件系统驱动和设备枚举是否内建。
非同步取消可能只阻止尚未开始的排队工作,若回调正在运行,调用返回后它仍可能访问资源。销毁路径通常需要同步取消并先阻止回调自我重排,同时避免持有回调完成所需的锁造成死锁。
remove 应先阻止新请求、注销外部入口并停止硬件,再等待或使在途操作安全失败;已打开文件的 private_data 必须由引用计数或独立生命周期保护,直到最后 release。不能在 remove 后让 file operation 解引用已释放设备。
read/write 应处理用户缓冲复制、部分传输、阻塞/非阻塞和返回字节数;是否使用并更新 `*ppos` 取决于设备语义。poll 只注册等待队列并返回当前就绪掩码,状态变化时驱动负责 wake_up。
文件描述符是进程表中的小整数,指向内核打开文件描述;dup/dup2 创建新的描述符引用同一打开文件表项,因此共享文件偏移和状态标志,但各描述符的 close-on-exec 标志可不同。