Jos*_*der 2 linux process capabilities exec
我正在教授操作系统课程,并试图围绕创建新进程的fork
/execve
技术进行思考。
我目前的理解是,fork 会完整复制旧进程,建立新的 PID 和父/子关系,但除此之外几乎没有其他作用。
另一方面,子进程创建后,它运行 execve 以用新进程替换其大部分内存。例如,程序代码、栈、堆被完全替换,作为一个新程序从头开始。
但并不是所有的东西都在新流程中被取代。子进程继承文件描述符(允许在 execve 之前设置管道)、进程 ID (PID) 和用户 ID (UID) 以及一些权限(手册页)。
我想没有被 execve 调用替换的属性的完整列表很长,但是是否还有其他关键属性,例如我上面提到的那些我遗漏的?
由于我们正在专门讨论 Linux(至少,我认为这是您想要的,因为您使用了linux标签),fork
和execve
联机帮助页是适当的参考;它们列出了所有未保留的属性。大多数这种行为是由 POSIX 指定的,但也有一些 Linux 特性。
该名男子的网页没有列出其属性都保留下来,而不是专注于那些没有:
在 期间保留所有进程属性
execve()
,但以下情况除外:
等等。
我不会尝试通过列出所有保留的属性来回答您的问题。但是,我将指出一个保留的关键属性,但您尚未列出:忽略和默认信号跨execve
. 这意味着父级可以忽略信号(至少,可以忽略的信号)并且该行为将传播到任何子级。这就是允许nohup
工作的原因。
您可以在The Linux Programming Interface 的第 28.4 节中找到进程属性的完整列表,并在exec()
或上解释它们会发生什么。fork()