如何在Linux中拆分stdout(在另一个视图中运行grep parallel)

时间:2016-03-29 08:43:29

标签: bash io pipe ipc

我想在Screen虚拟终端中运行gdb(GNU调试器)并在相邻的Screen视图上实时grep输出。

我如何实施这项安排?普通管道只是重定向输出。我也很好奇如何将屏幕视图(^ A + c)绑定到IO的现有流程。

编辑:

我提出了以下解决方案。使用 mkfifo pipe 创建命名管道并执行 gdb program | pty1 中的T恤管道 。这会将输出复制到管道。在 pty2 中,我执行了 less -f pipe | grep foo 打印感兴趣的行。

我确信必须有更简单的方法来完成这么简单的任务。

EDIT2:

上面提到的方法似乎有些错误。除非实际从FIFO中读取内容,否则Gdb不会向其控制台打印任何内容。这是为什么?此外,当我使用我自己的程序尝试此方法时,只需将printf HelloForld打印到stdout,两个视图中都不会打印任何内容。

EDIT3:

我发现,如果没有人真正从管道中读取,Tee就会故意阻止。同步的问题。我仍然想知道,原来的程序如何能够从键盘读取输入,即使Tee控制现在的终端窗口。或者是终端输入转到原始程序的stdin并输出到Tee的stdout?

1 个答案:

答案 0 :(得分:0)

你不必从double Value=i/60000; String s = (new DecimalFormat("##.#").format(Value)); 开始你的程序。只需在一个屏幕窗格中启动它,然后确定gdb(使用pidtoppgrep)。

在另一个窗格中,您启动ps会话:

gdb

这样你就有了一个控制gdb的终端和一个使用你正在调试的程序的终端,它们都有自己的输入和输出。

唯一的条件是程序运行的时间足以让您将调试器附加到进程。一种简单的方法是让它在开始时等待输入。您也可以将其打印为gdb <path_to_program> <pid>