如果STDOUT改变为我正在寻找的内容,请杀死命令行进程并重新启动?

时间:2011-06-12 23:28:42

标签: regex command-line process stdout kill

我有一个问题 - 我正在从命令行运行一个有一些问题的进程,并且每隔几个小时就会出现问题。当我正在研究这个问题时,我想从监视STOUT的某些字符串/正则表达式中生成进程,如果它输出的内容表明它已被破坏,则会终止并重启该进程。

我知道我可以通过滚动我自己的Python / Ruby脚本来实现这种方式但是我想知道是否有任何漂亮的工具可以用来使它更清洁一些?这是在Windows上,但我有cygwin,以防答案涉及到unix命令行进程。

1 个答案:

答案 0 :(得分:1)

程序| grep CRASH_STRING | xargs -l 1 sh -c'killall program&&程序

嗯,这样做一次。我不知道如何在循环中完成这项工作。我想了一些,可以通过将stdout重定向到命名管道来完成。但是shell脚本可能最终会比用脚本语言编写看门狗更加笨拙。

但是管道的想法是这样的:

mkfifo /tmp/fifo
program > /tmp/fifo&
while :
do
grep "CRASH_STRING" /tmp/fifo | xargs -l 1 sh -c 'killall program && program > /tmp/fifo&'
done