我可以打开一个套接字并将其传递给 Linux 中的另一个进程吗
Posted
技术标签:
【中文标题】我可以打开一个套接字并将其传递给 Linux 中的另一个进程吗【英文标题】:Can I open a socket and pass it to another process in Linux 【发布时间】:2011-01-01 03:24:40 【问题描述】:在 Linux 中,我可以打开一个套接字并将该套接字传递给另一个进程吗? 如果是,您能告诉我在哪里可以找到示例吗?
谢谢。
【问题讨论】:
Can I share a file descriptor to another process on linux or are they local to the process? 的可能重复项 @Gilles'SO-stopbeingevil' 您正在链接到一个在此之后按时间顺序询问的问题,它怎么可能是重复的? 【参考方案1】:是的,您可以使用 sendmsg()
和 SCM_RIGHTS 从一个进程到另一个进程:
SCM_RIGHTS
- 发送或接收一组 从另一个打开文件描述符 过程。数据部分包含一个 文件描述符的整数数组。 传递的文件描述符表现为 尽管它们是用dup(2)
.
http://linux.die.net/man/7/unix
但这不是典型的用法。更常见的是当进程从其父进程继承套接字时(在fork()
之后)。子进程可以使用任何未关闭的文件句柄(包括套接字)。所以子进程继承父进程的套接字。
侦听连接的服务器进程称为守护进程。这通常会在每个新连接上分叉,产生一个处理每个新请求的进程。典型守护进程的示例如下:
http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88
向下滚动到无效process()
。
【讨论】:
除非您不想为每个请求都派生一个新进程,而只是将请求传递给一组工作人员。 这看起来特定于 AF_UNIX。可以对 TCP 套接字执行此操作吗? @AdrianRatnapala:不,您不能通过 TCP 将套接字(或文件句柄)发送到另一台机器,它们必须位于同一个内核中。所以你通信的通道必须是AF_UNIX,但你传输的文件句柄当然可以是TCP套接字。 @Zarat,好的,很好,你自然不能跨机器发送它们。我不知何故想到只能传输 AF_UNIX 套接字。愚蠢的我 - 手册页实际上非常清楚。 如果两个进程也都从套接字读取会发生什么?以上是关于我可以打开一个套接字并将其传递给 Linux 中的另一个进程吗的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 AJAX 调用中的成功对象并将其传递给 thymeleaf 进行迭代