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 后不能执行任何代码;它是无法到达的。