步骤 2 / 6
fork:复制出一个自己
内核把 bash 复制一份,得到一个几乎一样的子进程。
bash 调用 fork(在 Linux 上底层是 clone 系统调用),内核复制出子进程。 fork 返回两次:父进程拿到子进程的 PID,子进程拿到 0,靠这个区分“我是谁”。 Linux 用“写时复制”,有人改内存时才真正复制,所以 fork 并不慢。
操作系统
在终端敲下一个命令,bash 是怎样把它变成一个新运行的程序的。
以在 Linux 的 bash 里输入 ls 为例。
步骤 2 / 6
内核把 bash 复制一份,得到一个几乎一样的子进程。
bash 调用 fork(在 Linux 上底层是 clone 系统调用),内核复制出子进程。 fork 返回两次:父进程拿到子进程的 PID,子进程拿到 0,靠这个区分“我是谁”。 Linux 用“写时复制”,有人改内存时才真正复制,所以 fork 并不慢。
| 当前状态 | 发生了什么 |
|---|---|
| bash 运行中 | 用户输入 ls,bash 需要启动一个新程序 |
| 父子两个进程 | 内核复制出子进程 |