gpt4 book ai didi

linux - 使用 shell 命令将数据汇集到守护进程的非守护进程中

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:43 25 4
gpt4 key购买 nike

这就是我想要做的:

$ serverise normally-barely-interactive-program-that-uses stdin stdout &<br/>
unique-id-221B
$ clienty 221B "Astonishing!"<br/>
Elementary<br/>
$ clienty 221B "what did I just say?"<br/>
'Astonishing', although the methods are simple and easily followed, once explained.<br/>
$ clienty 221B "so, you persist between invokations of the client?"<br/>
Indeed.

我已经尝试过双命名管道,但它们只有最后一次调用。我认为这是因为服务器端收到 EOF,因此假设用户已关闭标准输入。

套接字似乎是可行的方法,但大多数包装器都采用类似 http 的模型,并在每次有人连接时 fork 出一个新程序。 Socat 貌似没问题,但也只用了一次就死了。

我已经看到 Gnu Screen 和 Tmux 用于此,但这似乎有点过分,老实说,我不能假设用户的环境不会包含任何一个,因此任何像这样的解决方案都会有点脆弱面对这些非标准配置。这似乎也有点矫枉过正。

这似乎是一个以前会出现的问题,所以我一定是在错误的地方寻找执行此操作的时髦小实用程序。

最佳答案

关于命名管道仅持续一次调用的问题:如果这确实是您唯一的问题,那么它很容易解决。 (我的示例几乎没有交互的程序恰好是 bc)

$ mkfifo in out
$ while read line <in; do echo "$line"; done | bc >out &
$ cat out &
$ echo "1+1" >in
2
$ echo "2+2" >in
4

这是通过重新打开输入管道一次只读取一行,同时写入一个在整个 session 中只打开一次的未命名管道来实现的。

注意:

  • 一次只能输入一行
  • 输出流同样有只需要打开一次的问题

关于linux - 使用 shell 命令将数据汇集到守护进程的非守护进程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4756552/

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