gpt4 book ai didi

linux - fork() 如何知道它是在子进程中还是在父进程中?

转载 作者:太空狗 更新时间:2023-10-29 11:32:50 24 4
gpt4 key购买 nike

<分区>

当执行 fork() 系统调用时,处理器进入内核模式。

因此在 fork 调用结束时,一个新进程产生了几乎所有调用进程构造的副本(如堆栈、用户数据和用户程序等)

从许多回答得很好的解释中也可以清楚地看出进程(程序员)如何识别子进程和父进程之间的区别。根据 SO 和其他地方的许多记录的答案:

if a call to fork() returns 0 it means that it is the child process that called the fork(). While if the return value of fork() is a positive integer, it means that the fork() was executed in the parent process and the returned positive integer is a PID of the child process. Ignoring the case of negative value returns for the sake of brevity.

希望我上面的理解是正确的:fingers_crossed:

但是,以下是我试图更好地理解的内容,希望更详细/更深入:

(请原谅我对这个主题的无知。我只是想从内部的角度更好地理解这个主题。这个主题和我想要更清楚地了解它现在已经开始劫持我的梦想了:P)

系统调用(在调用 fork() 时被调用)如何知道现在它正在作为子进程的一部分执行因此应该返回0?

换句话说,系统调用如何知道它正在父进程的上下文中执行,因此这次它应该返回子进程的 PID 而不是 0?

或者是这样的,在 2 个进程中,因为两者都是精确的副本,其中一个随机获得返回值为 0,另一个作为 PID 然后基于哪个得到什么返回值,据此认为是 parent 和 child ? :thinking_face:

我很乐意使用我应该使用的任何资源来指导我的方向。实际上,我真的很感激这方面的任何帮助。 :祈祷:

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com