# AI 面试复盘与知识点总结 > ** 写在前面** > 刚参加完 AI 面试,虽然说是没有那种真人的感觉,但是**压迫感还是很强的**,哈哈哈哈。 > 这也是我第一次参加面试,所以准备还是差点的。这篇文章主要也是**写给自己提个醒**。 > 在面试过程中,有很多的理论知识(或者说“八股文”),有的时候可能自己实际过程中也用得到,但是不知道叫什么或者是怎么说。 > 下面就简单总结一下遇到的大部分问题吧(有的忘记了,顺序可能也不一样)。 --- ## 1. 什么是僵尸进程? **僵尸进程** 是指子进程已经终止运行,但是**父进程还没有读取它的退出状态**。 * **资源占用情况**: * 子进程的代码段、数据段等内存资源**已经被释放**。 * 它**不占 CPU**,也**不占内存**。 * **但是**,它在 **系统的进程表** 里还占着一个 **PID**。 * 它保留着退出码、资源使用统计等信息,等着父进程来“收尸”。 * **状态标识**: * 在 `ps` 命令里看,它的状态通常是 **`Z` (Zombie)** 或者标记为 **`defunct`**。 > **注意**:它只占 **PID 槽位**,不占其他系统资源。但如果大量积累,会导致系统无法创建新进程(PID 耗尽)。 ### 1.1 僵尸进程与父子进程的关系 僵尸进程的产生完全取决于**父进程的行为**,其生命周期如下: 1. **子进程终止**:子进程调用 `exit()` 终止,内核释放其大部分资源。 2. **内核保留**:内核保留子进程的**进程描述符**(含退出码等信息),等待父进程读取。 3. **父进程回收**: * 若父进程调用 `wait()` / `waitpid()`:内核彻底删除该条目,**僵尸消除**。 * 若父进程**不调用** `wait`:子进程就一直保持僵尸状态。 4. **父进程退出**:如果父进程先退出,子进程会被 **`init` / `systemd`** 接管,自动清理。 > **核心结论**:僵尸进程是**父进程未回收子进程**导致的,责任在**父进程**。 ### 1.2 如何解决僵尸进程? 解决思路主要是**定位父进程**并**促使其回收**,或者**杀死父进程**。 #### 1. 定位父进程 使用 `ps` 命令查找状态为 `Z` 的进程及其父进程 ID (PPID): ```bash ps -eo pid,ppid,stat,cmd | grep 'Z' ``` #### 2. 尝试通知父进程回收 向父进程发送 `SIGCHLD` 信号,提示其处理子进程退出状态: ```bash kill -s SIGCHLD <父进程 PID> ``` #### 3. 强制杀死父进程 如果父进程无响应或无法修复,直接杀死父进程。父进程死后,僵尸进程会被 `init` 接管并自动清理: ```bash kill -9 <父进程 PID> ``` --- 还有其他问题,等我慢慢复盘总结一下~