gpt4 book ai didi

bash - 有没有一种简单而可靠的方法可以在 Bash 中创建 "singleton"进程?

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

环境:最近的Ubuntu,非标准的包只要不是太奇葩都可以。

我有一个数据处理器 bash 脚本,用于处理来自 stdin 的数据:

$ cat data | process_stdin.sh

我可以更改脚本。

我有一个遗留数据生成器系统(我无法更改),它通过 SSH 登录到一台机器并调用脚本,通过管道传输数据。伪代码:

foo@producer $ cat data | ssh foo@processor ./process_stdin.sh

遗留系统每天启动 ./process_stdin.sh 无数次。

我想让 ./process_stdin.shprocessor 机器上无限期运行,以消除进程启动开销。遗留生产者将调用某种包装器,以某种方式将数据通过管道传输到实际的处理器进程。

是否有一种健壮的 unix 方式来用最少的代码做我想做的事?我不想更改 ./process_stdin.sh(太多)——完全重写已经安排好了,但是,唉,还不够快——而且我无法更改数据生产者。

最佳答案

一个(不那么)肮脏的 hack 可能如下所示:

作为 processor 上的 foo,创建一个 fifo 并运行 tail -f 重定向到 stdin process_stdin.sh,可能在无限循环中:

foo@processor:~$ mkfifo process_fifo
foo@processor:~$ while true; do tail -f process_fifo | process_stdin.sh; done

别担心,此时 process_stdin.sh 只是在等待一些东西到达 fifo process_fifo。无限循环只是为了防止出现错误,以便重新启动。

然后你可以这样发送你的数据:

foo@producer:~$ cat data | ssh foo@processor "cat > process_fifo"

希望这能给你一些想法!

关于bash - 有没有一种简单而可靠的方法可以在 Bash 中创建 "singleton"进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513798/

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