【问题标题】:How to fork interactive programs如何分叉交互式程序
【发布时间】:2011-12-07 05:54:52
【问题描述】:

我有一个启动成本很高的交互式程序。启动后,我想将该过程分成单独的并发会话。理想情况下,每个单独的会话都将成为一个 GNU screen 窗口,但能够单独 telnet/ssh 到每个会话也可以。

从头开始写这个应该不会太难,但它似乎是以前应该完成/考虑的事情,也许这是一个坏主意的原因......

我知道另一种方法是使用共享内存来存储初始化成本很高的数据。我不愿意走这条路的原因是共享数据使用带有指针的 C++ 数据结构,这使得很难将其映射到不相关的进程中。

【问题讨论】:

  • 更新:我编写了一个 Python 库的概念证明,该库启动一个 Unix 域套接字侦听器,并在每个客户端上 connect fork Python 程序,通过套接字将 pty master fd 传递给客户端;我还编写了一个小型 C 客户端,然后将 pty master fd 连接到客户端的控制 tty。

标签: unix shared-memory mmap pty


【解决方案1】:

这是任何数据库所做的 - 启动非常昂贵,但数据库提供了几种不同的连接方式 - 例如 Oracle 的 BEQ 协议。

Telnet 有问题,考虑 ssh。无论哪种方式,考虑一个守护进程来响应端口上的连接请求(我猜你会使用 AF_UNIX 套接字),然后创建一个单独的会话。

Stevens Advanced Programming in the UNIX Envrionment 或 Rochkind 的 Advanced UNIX Programming 有讨论和完整示例。由于我的 Stevens 书似乎已经放假了,请参阅 Rochkind 4.3 和 4.10。

不,使用这种方法没有悬而未决的厄运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2011-09-09
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多