如何将管道作为持久进程启动

如何将管道作为持久进程启动

假设您以这种方式运行可执行文件:

$ echo <params> | <process>

如果process不是作为管道运行,那么您键入$ process &它就会保持运行。上面的命令行需要什么才能process持久启动?

更新:

更准确地说,w3mimgdisplay可以作为持久进程运行,这就是w3m滚动后保持图像显示在终端上的方式。如何从命令行以这种方式运行该程序?

echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' | /usr/lib/w3m/w3mimgdisplay

答案1

看来你需要命名管道:

https://askubuntu.com/questions/449132/why-use-a-named-pipe-in​​stead-of-a-file

基本上,您创建一个命名管道,运行从命名管道获取输入的进程,然后将您想要的任何内容传递给命名管道,以便该进程处理它。

例如:

mkfifo /tmp/namedpipe
tail -f /tmp/namedpipe &
echo "BOO"> /tmp/namedpipe
echo "this" > /tmp/namedpipe

...这将(尾部)回显发送到 /tmp/namedpipe 的所有内容到标准输出。

我使用tail而不是cat,因为cat收到EOF时就会退出进程。

UPD。澄清。

要将其传递给您的流程,您需要执行以下操作:

tail -f /tmp/namedpipe | yourprocess &

UP2。所以在你的情况下,顺序将是这样的:

mkfifo /tmp/namedpipe 

--- 这将是您可以将数据发送到进程的入口点。

tail -f /tmp/namedpipe |  /usr/lib/w3m/w3mimgdisplay &

-- 然后,这将创建您想要的持久进程,并且将来会向您通过管道发送的任何内容提供信息。

echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' > /tmp/namedpipe

应该在屏幕上向您显示图像。

从现在开始,您将发送到 /tmp/namedpipe 的任何其他内容都将像回显到命令的新行一样,并且同样应该显示在屏幕上。

相关内容