我理解在创建分叉子进程时,该进程可以通过exit()终止,但是当子进程执行另一个程序(execvp(),execlp()等等)时,之后编写的任何代码都会被忽略。那时子进程如何终止?它如何告诉父母已经结束了? 谢谢!
答案 0 :(得分:1)
exec
时子进程不会退出。会发生什么 - 当前流程被exec
的任何内容所取代。
exec()系列函数用新的过程映像替换当前过程映像。
是的 - exec
之后的任何代码都被有效地丢弃了。通常情况下,会发生fork
然后exec
- 使用新的可执行映像创建子进程,然后等待它完成(或不完成){{1} (这将阻止直到子退出,并收到返回代码)。
当{{1}在您的程序状态中仅{em} 差异时,是fork的返回码 - 这是子pid。当您的孩子拨打waitpid
时保持不变。