第一种可能的解决方案:
your_program > tempfile1
grep -i "Completed successfully" tempfile1; 如果 [ $? -eq 0 ] ; 然后 i=`pidof your_program`; 杀死$i; 菲
首先是重定向。其次检查 grep 的退出状态。如果它是 0(成功),它会获取程序的 pid 并杀死它。
这是一个“快速思考”的练习。它应该工作。一个缺点是您一次只能运行一个程序实例,但当然可以进行调整并且您可以并行运行它。
edit-27.05.2010:
第二个可能的解决方案:
tail --pid=`pidof your_program` -f -n0 tempfile1 | awk '/Completed/ {if ($1=="Completed") {system("i=`pidof your_program`; kill $i")}}' &
好吧,有了这条长线,您不再需要循环/crontab。解释:--
pid=`pidof your_program` 在指定的 PID 结束后使 tail 死掉。这样,当程序被杀死时,tail 也会随之死亡。
-n0 忽略 tempfile1 中的其他“已完成”语句(因此您不必担心总是先截断 tempfile1)。
awk 搜索您的程序抛出的“已完成”语句,该{system}
部分在您的程序上执行 kill。
也不要忘记&
最后的,因为它是整个事情的背景。
玩得开心。