use*_*885 35 command-line process
当一个进程从 shell 启动时,为什么 shell 在执行进程之前会自己fork?
例如,当用户输入时grep blabla foo
,为什么shell 不能在exec()
没有子shell 的情况下调用grep?
此外,当 shell 在 GUI 终端仿真器中分叉自身时,它是否会启动另一个终端仿真器?(比如pts/13
开始pts/14
)
sha*_*anu 37
当您调用exec
家族方法时,它不会创建新进程,而是exec
用您要运行的进程替换当前进程内存和指令集等。
例如,您想grep
使用 exec运行。bash
是一个进程(它有单独的内存、地址空间)。现在,当您调用 时exec(grep)
,exec 将用数据替换当前进程的内存、地址空间、指令集等grep's
。这意味着bash
过程将不再存在。因此,您在完成grep
命令后无法返回终端。这就是 exec 系列方法永远不会返回的原因。exec 后不能执行任何代码;它是无法到达的。