在Unix中,每当我们想要创建一个新进程时,我们会fork当前进程,创建一个与父进程完全相同的新子进程;然后我们执行 exec 系统调用以将来自父进程的所有数据替换为新进程的所有数据。
为什么我们首先创建父进程的副本而不是直接创建新进程?
我从现代操作系统一书中读到,当一个命令运行时,shell 创建一个子进程,等待它直到子进程完成执行,然后等待来自用户的另一个命令。对于像gedit
. 终端在我关闭之前不会接受命令gedit
。但是,当我打开atom代码编辑器时,shell 立即返回,即使编辑器正在运行,也准备好接受下一个命令。关闭终端不会关闭原子。这是否意味着编辑器不是作为子进程打开的?使这成为可能的潜在机制是什么?
跑步ps au | grep atom
给予
<username> 8042 0.0 0.0 15944 2264 pts/1 S+ 00:55 0:00 grep --color=auto atom
Run Code Online (Sandbox Code Playgroud)