是否可以创建自定义流?

是否可以创建自定义流?

我不确定这里使用什么术语,所以请耐心等待。

我正在编写一个产生的应用程序很多日志。我认为能够让我的应用程序将日志流式传输到,并允许其他进程像流一样foo读取(如),这会很酷。foo/dev/random

也就是说,我想在某个地方连续地传输日志(不必担心文件系统的东西,如归档、删除等),并且有能力让其他进程“接入”该流,就好像它是一些无尽的一样文件。

我该怎么做呢?什么是foo

理想情况下:

terminal 1
> mkthing foo
> while :; do echo 'abcdefg' >> foo; sleep 1; done

terminal 2
> echo foo
(outputs "abcdefg" every second)

答案1

查看日志的绝对正常方法是将它们写入文件。当您想查看日志时,请阅读该文件。要观察附加到文件中的行,请使用以下命令tail -f,在到达文件末尾后,保持文件打开并监视附加到其中的额外行。该选项-f用于“关注”,并且在较少的F你可以用“follow”达到同样的效果;在其他程序中,这可能被称为“拖尾”文件,因为tail这是执行此操作的经典实用程序。看tail该网站上的标签有关尾矿公用事业的更多信息。

如果您绝对不想将日志写入文件,您可以在以下位置运行应用程序屏幕或者多路复用器。要/usr/bin/my_application --some-option在后台运行,请使用屏幕:

screen -S myapp -d -m /usr/bin/my_application --some-option

要查看日志:

screen -S myapp -d -r

Ctrl+A d分离,即停止查看日志。当您查看日志时,您还可以将输入发送到应用程序,这可能是理想的,也可能是不需要的。要仅授予只读访问权限,请参阅有没有办法以只读模式运行“屏幕”?

使用 tmux,启动应用程序:

tmux new-session -s myapp -d /usr/bin/my_application --some-option

查看最新日志:

tmux attach -r -t myapp

Ctrl+A d分离。运行时tmux attach无法-r与应用程序交互。


A命名管道不是你想要的。我只是提到它,因为它表面上看起来很合适(当我写它时,它会出现在评论中)。它将执行您所描述的操作:

mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done

并行于

cat foo

这不是您想要的,因为必须只有一个读者。如果没有读取器,写入端就会阻塞。如果有多个读取器,则每一行(或块,取决于程序如何生成输出)将被恰好一个读取器看到,或多或少是随机选择的。如果有一个读取器并且它消失了,那么写入端将无法写入,并且如果没有禁用它们,则会收到 SIGPIPE。

相关内容