步骤 4 / 6
wait:父进程等孩子结束
bash 调用 wait 暂停自己,直到 ls 运行完。
如果 bash 不等,ls 的输出就会和下一个提示符混在一起。 wait 让父进程睡眠,内核在子进程结束时把它唤醒。 这像前端 await 一个 Promise:不占着 CPU 空转,结果来了再继续;在命令末尾加 & 就是不等它。
操作系统
在终端敲下一个命令,bash 是怎样把它变成一个新运行的程序的。
以在 Linux 的 bash 里输入 ls 为例。
步骤 4 / 6
bash 调用 wait 暂停自己,直到 ls 运行完。
如果 bash 不等,ls 的输出就会和下一个提示符混在一起。 wait 让父进程睡眠,内核在子进程结束时把它唤醒。 这像前端 await 一个 Promise:不占着 CPU 空转,结果来了再继续;在命令末尾加 & 就是不等它。
| 当前状态 | 发生了什么 |
|---|---|
| bash 运行中 | 用户输入 ls,bash 需要启动一个新程序 |
| 父子两个进程 | 内核复制出子进程 |
| 子进程运行 ls | 子进程变成了 ls |
| bash 等待中 | 父进程睡眠,等待子进程 |