有没有办法从已经运行的程序中获取输出?

时间:2014-03-17 15:07:37

标签: linux bash

我正在尝试编写一个启动rtmpsrv的脚本并等待它的一些输出。 rtmpsrv提供所需的输出并继续运行,但脚本正在等待rtmpsrv的终止。如何在不停止的情况下访问rtmpsrv的输出?

3 个答案:

答案 0 :(得分:1)

最简单的方法是:

rtmpsrv > logfile &

然后,您可以在logfile中搜索您要查找的文字。与此同时,rtmpsrv会做到这一点,完全不知道你的脚本。

此问题包含如何在脚本中等待某个模式出现在日志文件中的示例(因此您不必一次又一次地搜索它):Do a tail -F until matching a pattern

注意:如果您在脚本中启动rtmpsrv进程并且脚本终止,则可能会终止rtmpsrv进程。为避免使用nohup

答案 1 :(得分:1)

嗯,我不熟悉rtmpsrv,但除非必要,否则你应该等待它完成。但是,您可以将其输出重定向到文件,然后grep该文件以查看它是否包含您要查找的字符串。

(虚构的代码......你可以期待语法地狱,只想给你一个想法)

nohup rtmpsrv >log.rtmpsrv 2>&1 &
...
while :; do
    if ! result=$(grep "your desired line" log.rtmpsrv); then
        echo "success: found $result"
        break
    fi
done

注意:if构造应该按照http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html工作 - 只是为了拥有更好的代码,正如@Charles Duffy建议的那样。

答案 2 :(得分:0)

只需使用gdb -p <pid>附加到流程,其中pid是您脚本的流程ID。

您可以通过像ps ax | grep <My Script's Name>

这样的smth找到正在运行的脚本的pid

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

相关问题