【问题标题】:Bind application to several Linux terminals将应用程序绑定到多个 Linux 终端
【发布时间】:2009-06-11 07:47:56
【问题描述】:

我有一个产生多个进程的应用程序。是否可以将子级的输出重定向到另一个隐藏终端,使其不会与父级输出混合,并让最终用户能够在需要时取消隐藏终端?

谢谢。

【问题讨论】:

  • 你能改变产生子进程的程序吗?

标签: linux terminal


【解决方案1】:

快速而肮脏的方法是将子进程的输出重定向到(临时)文件。

然后可以使用类似的命令启动跟踪该文件的终端

xterm -e tail -f /tmp/child1.out

此终端可以在需要时关闭和打开。

如果您不想将输出存储在文件中,您可以使用 fifo(请参阅mkfifo(1)),但是您将无法查看过去的输出,因为 fifo 不存储数据。

【讨论】:

  • 我曾考虑将输出泵入 FIFO,但问题是,如果没有人从 FIFO 读取数据并且我的应用程序运行了数周,它不会用这种不必要的输出填充操作系统的 RAM 吗?
  • 不。它会阻止你的程序。 :-)
  • 在读取器开始清空管道之前,进程可以写入管道的数量是否有任何限制?
  • 是的。出于您的目的,除非您打算让阅读器一直运行,否则您不能使用 FIFO。如果你真的想在没有阅读器的情况下写几个星期而不是普通文件(可能在达到一定大小后进行某种旋转)是唯一真正的选择。
【解决方案2】:

从您的终端运行:

touch proc1.log
xterm -e tail -f proc1.log
topuch proc2.log
xterm -e tail -f proc2.log
/run/proc/1.sh >> proc1.log
/run/proc/2.sh >> proc2.log

现在您有 2 个终端跟随衍生进程的输出

【讨论】:

    【解决方案3】:

    屏幕可以做到这一点。您可以使用新程序启动一个分离的屏幕。

    类似:

    screen -d -m -S my-emacs-session emacs foo.c
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多