我正在教授操作系统课程,并试图围绕创建新进程的fork
/execve
技术进行思考。
我目前的理解是,fork 会完整复制旧进程,建立新的 PID 和父/子关系,但除此之外几乎没有其他作用。
另一方面,子进程创建后,它运行 execve 以用新进程替换其大部分内存。例如,程序代码、栈、堆被完全替换,作为一个新程序从头开始。
但并不是所有的东西都在新流程中被取代。子进程继承文件描述符(允许在 execve 之前设置管道)、进程 ID (PID) 和用户 ID (UID) 以及一些权限(手册页)。
我想没有被 execve 调用替换的属性的完整列表很长,但是是否还有其他关键属性,例如我上面提到的那些我遗漏的?