gpt4 book ai didi

c - 在 vfork()/clone() 中调用 execv() 之前设置 setuid()

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:04 25 4
gpt4 key购买 nike

我需要从服务器派生一个 exec。由于我的服务器内存占用很大,我打算使用 vfork()/linux clone()。我还需要为 stdin/stdout/stderr 打开管道。 clone()/vfork() 是否允许这样做?

最佳答案

来自标准:

[..] the behaviour is undefined if the process created by vfork() either modifies any data other than a variable of type pid_t used to store the return value from vfork(), or returns from the function in which vfork() was called, or calls any other function before successfully calling _exit() or one of the exec family of functions.

调用 setuidpipe 等函数的问题在于它们可能会影响父进程和子进程之间共享的地址空间中的内存。如果您需要在 exec 之前执行任何操作,最好的方法是编写一个小的 shim 进程来执行您需要的任何操作,然后 execs 到最终的子进程(可能是通过 argv 提供的参数。

shim.c
======

enum {
/* initial arguments */
ARGV_FILE = 5, ARGV_ARGS
};
int main(int argc, char *argv[]) {
/* consume instructions from argv */
/* setuid, pipe() etc. */
return execvp(argv[ARGV_FILE], argv + ARGV_ARGS);
}

关于c - 在 vfork()/clone() 中调用 execv() 之前设置 setuid(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11628892/

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