gpt4 book ai didi

bash - 如何捕获后台进程的输出

转载 作者:行者123 更新时间:2023-11-29 09:32:09 28 4
gpt4 key购买 nike

在后台运行进程并仅在需要时接收其输出的最佳方式是什么?

预期用途:使具有大量初始化的提示输出脚本在每个 session 中初始化一次,而不是在每次提示运行时初始化。注意:需要双向通信:shell 需要告诉何时需要新提示,最后一个命令状态是什么。

已知解决方案:

  • 一些在文件系统上显式创建的文件(FIFO 文件、UNIX 套接字):最好避免这种情况,因为这意味着我需要选择文件名,确保它在退出时被垃圾收集并不再添加要清理的内容发生崩溃时使用的文件。
  • zsh/zpty 模块:对于这项工作有点矫枉过正,在 bash 中不起作用。
  • coprocesses:在 bash 中不起作用,据我所知,每个 session 只允许一个 coprocess。

最佳答案

Bash 从 4.0 开始支持协程,但多协程仍处于试验阶段。

我会使用一些明确创建的文件,将它们命名为 ~/.myThing-$HOSTNAME/fifo 如果它们是针对每个用户和主机的。您可以使用 flock 相对容易地确定命令是否仍在运行并可选择启动它:

(
flock -n 123 || exit 1
rm/mkfifo ..
exec yourServer < .. > ..
) 123> ~/".myThing-$HOSTNAME/lockfile"

如果命令或服务器挂掉,锁会自动释放,你周围只有几个零长度的文件。下次服务器启动时,它会删除并重新设置它们。

查询服务器将是类似的,但如果锁在使用中则退出(并且可选地使用等待锁来避免争用)。

关于bash - 如何捕获后台进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465542/

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