3

每当我们打开终端时,内核都会创建一个进程(使用 fork+exec 的 bash 终端),它的父进程是“init”。但是这个“伙伴终端”变成了父进程并创建了另一个由用户可视化的进程“终端”。

只是想知道“init”(pid = 1,ppid = 0),“mate-terminal”(pid = 200和ppid = 1)和“终端”(pid = 201 和 ppid = 200)。

我知道进程堆栈以及共享哪些段,但在这个实际场景中无法清晰地可视化。

请帮助我理解该过程的记忆语义..

欢迎任何帮助..

4

1 回答 1

2

init 和它的终端孩子之间没有任何共享,第一个终端和它的终端孩子之间也没有共享任何东西。

这是因为,虽然 fork() 会使两个进程(父进程和子进程)共享一些对象,但 exec() 族函数完全用新的进程映像替换了当前进程映像。

这意味着所有对先前对象的引用,例如来自父亲的共享文件描述符,都将被遗忘。

于 2013-09-02T12:23:43.547 回答