步骤 5 / 6
exit 与回收:进程的结束
子进程退出后留下退出码,被父进程 wait 取走才算彻底消失。
ls 运行完退出,内核释放它的大部分资源,只保留退出码等父进程来读;在 bash 里 echo $? 就能看到它。 父进程取走退出码后,子进程才彻底消失。 如果父进程一直不 wait,子进程就成了“僵尸”,在 ps 里显示为状态 Z。
操作系统
在终端敲下一个命令,bash 是怎样把它变成一个新运行的程序的。
以在 Linux 的 bash 里输入 ls 为例。
步骤 5 / 6
子进程退出后留下退出码,被父进程 wait 取走才算彻底消失。
ls 运行完退出,内核释放它的大部分资源,只保留退出码等父进程来读;在 bash 里 echo $? 就能看到它。 父进程取走退出码后,子进程才彻底消失。 如果父进程一直不 wait,子进程就成了“僵尸”,在 ps 里显示为状态 Z。
| 当前状态 | 发生了什么 |
|---|---|
| bash 运行中 | 用户输入 ls,bash 需要启动一个新程序 |
| 父子两个进程 | 内核复制出子进程 |
| 子进程运行 ls | 子进程变成了 ls |
| bash 等待中 | 父进程睡眠,等待子进程 |
| bash 继续运行 | 子进程被回收,显示下一个提示符 |