c - 在 child 完成 exec 后与 child 共享文件描述符表

标签 c linux fork

有什么方法可以创建一个新进程,即使在 exec 之后也能共享您的文件描述符表? clone(CLONE_FILES) 将不起作用,如手册页所述:

If a process sharing a file descriptor table calls execve(2), its file descriptor table is duplicated (unshared).

最佳答案

这可以通过向子进程注入(inject)一段自定义代码来完成,该代码负责接收 FD 并更新子进程的描述符表。

子进程应在其上创建 AF_UNIX 套接字和 recvmsg(),而父进程应使用 sendmsg() 复制并“向下传输”所需的文件描述符 - 参见 here

关于c - 在 child 完成 exec 后与 child 共享文件描述符表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44533936/

相关文章:

c - 为什么 semop(semid,&wait[1],2);在一组三个信号量上减少第 0 个信号量而不是第 1 个和第 2 个信号量的值?

c++ - 即使我安装了正确的 libprotoc 版本,也会看到 libprotobuf FATAL 错误

perl - 如何等待子进程在父进程中设置变量?

shell - 关闭进程的所有管道

c++ - 子进程在 fork 3 秒后自行终止

c - printf 的这个结果说明了什么?

c - Windows:使用事件进行共享内存同步

c++ - 在 C++ 中使用为 C 制作的 Linux API header

c - 尝试创建一个简单的 "Debugger"(一个简单的 C 程序)

linux - CentOS 7 Apachect1 移除虚拟主机