gpt4 book ai didi

一个fork child能判断它是fork还是vfork吗?

转载 作者:行者123 更新时间:2023-12-03 22:59:58 25 4
gpt4 key购买 nike

在子进程中,有什么方法可以确定它是作为具有覆盖内存的 fork 还是作为具有共享内存的 vfork 启动的?
基本上,我们的日志引擎需要在 vfork 中更加小心(而不是记录某些类别的事件)。在 fork 中,它需要以 vfork 中没有的方式与父进程合作。我们知道如何做这两件事,但不知道如何决定。
我知道我可能会拦截 fork/vfork/clone 调用,并将 fork/vfork/mapping 状态存储为一个标志,但是如果 child 可以通过 API 调用来确定它自己的状态,这会让生活变得更简单。
额外标记:理想情况下,我还需要在库中选择任何已经完成 fork 或 vfork 的地方,然后再调用我们的代码。那怎么会发生呢?我们至少有一个库提供了类似 popen 的 API,其中在 exec 之前从 fork 子级调用客户端回调。显然,该回调的效用在 vfork 中受到显着限制。

最佳答案

所有不是专门为在 vfork() 下工作而设计的代码在 vfork() 下不起作用.
从技术上讲,您可以检查您是否在 vfork() 中 child 打电话mmap()并检查内存映射是否由 /proc 下的父进程继承.不要写这个代码。这是一个非常糟糕的主意,没有人应该使用它。真的,这是判断您是否在 vfork() 中的最佳方式 child 与否将传递该信息。但重点来了。你打算怎么办?
你不能做的事情vfork()子包括调用 fprintf() , puts() , fopen() ,或任何其他标准 I/O 函数,也不是 malloc()对于这个问题。除非代码经过精心设计,否则最好根本不要调用日志框架,如果它经过精心设计,则不需要知道。更好的设计很可能是在调用 vfork() 之前记录您的意图。首先。
您在评论中询问了一个调用 fork() 的图书馆然后回到你的代码。这已经有点糟糕了。但是任何图书馆都不应该调用 vfork()并返回到您的代码中,而无需明确记录这样做。 vfork()是一个受限制的环境,调用不应该出现在该环境中的事情真的不应该发生。

关于一个fork child能判断它是fork还是vfork吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66548922/

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