我正在尝试使用irc客户端。我可以通过suckless文件收听频道。但是,我是否也可以通过启动iitail -f out命令输入到同一控制台?
如果我设置进程的后台,它实际上会在这个控制台中显示输出,但这似乎不是正确的方式?逻辑上,我认为我需要得到控制台的echo(但如何做到这一点),然后将尾部输出强制到fd,并可能将其作为背景。然后使用现在的bash启动cat
这样做真的很好吗?还是我正在为一个简单的任务创建大量的流程开销?换言之,管道输送很多东西是好的,但它会产生大量的开销,理想情况下,如果你要经常重复这项任务,就必须在一个过程中完成?

最佳答案

但是,我是否也可以通过启动echo或cat命令输入到同一个控制台?
完全没有!cat写入当前内容。猫不知道内容以后会增长。echo从给定的命令行写入变量和结果。echo本身不是用来编写文件内容的。
如果我设置进程的后台,它实际上会在这个控制台中显示输出,但这似乎不是正确的方式?
如果不重定向输出,则输出将转到控制台。它就是这样设计的:-)
逻辑上,我想我需要得到控制台的fd(但如何做到),然后强制尾部输出到fd,可能还要加上背景。
据我所知,这是相反的方向。如果要从进程中写入stdin,只需使用一个管道即可。(无用的)示例显示,cat向管道写入数据,下一个命令将从管道读取数据。您可以扩展到任何其他管道读/写方案。请参阅下面给出的链接。
例子:

cat main.cpp | cat  /dev/stdin
cat main.cpp | tail -f

最后一个将不会退出,因为它等待管道获得更多的内容,这是从来没有发生过的。
这样做真的很好吗?还是我正在为一个简单的任务创建大量的流程开销?换言之,管道输送很多东西是好的,但它会产生大量的开销,理想情况下,如果你要经常重复这项任务,就必须在一个过程中完成?
我不知道你的工作对时间有多重要,但我相信开销是相当低的。在一个自己编写的程序中执行同样的操作不能更快。如果所有操作都在一个进程中完成,并且不需要访问文件系统,则速度会快得多。但如果你也使用系统调用,例如文件系统访问,我相信不会快得多。你总是要为你得到的工作付出代价。
有关IO重定向,请阅读:
http://www.tldp.org/LDP/abs/html/io-redirection.html
如果场景更复杂,可以考虑命名管道而不是IO重定向。为此,您可以查看:
http://www.linuxjournal.com/content/using-named-pipes-fifos-bash

关于linux - 如何使用将同一控制台附加到一个进程的输出和另一个进程的输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37293835/

10-12 00:43
查看更多