当没有读取该 FIFO 时,防止挂起“echo STRING > fifo”

joj*_*man 4 shell io-redirection echo fifo

当我echo对用 制作的命名管道进行处理时mkfifo,如果没有进程从该管道读取,它就会挂起。我怎样才能防止这种情况发生,即阻止它挂起?

顺便说一句,为什么挂起的echo过程没有在ps -e或 中列出pstree

Chr*_*own 5

不完全清楚您想要的最终结果是什么,所以我假设您的愿望是继续该程序,但仍然在可能的情况下进行写入。在这种情况下,只需后台操作:

echo foo > fifo &
Run Code Online (Sandbox Code Playgroud)

至于为什么echo没有列在进程表中,是因为echoshell builtin

  • 我不认为这是一个合理的答案。它只会导致大量卡住的“echo”进程。(与 OP 的原始示例不同,它们 * 将 * 成为单独的进程,因为它们是后台的。)相反,需要某种机制来在没有读取器时立即产生故障。 (4认同)