[Ruby] Re: [Ruby] IO.popen("cmd").readlines.grep(/str/) оставляет зомби

vic ismakaev viclists at mail.esoo.ru
Fri Apr 25 10:26:10 MSD 2003


25 Апрель 2003 12:16, Sergei Olonichev написал:
> vic ismakaev wrote:
> >22 Апрель 2003 21:56, vic ismakaev написал:
> >>22 Апрель 2003 21:50, Alexander Bokovoy написал:
> >>>On Tue, Apr 22, 2003 at 09:42:24PM +0600, vic ismakaev wrote:
> >>>>Приветствую!
> >>>>Снова я с тупым вопросом.
> >>>>Например,когда в цикле каждую секунду я пытаюсь выполнить оперцию вида
> >>>>
> >>>>ipt=IO::popen("iptables -nvL FORWARD").readlines.grep(/192.168.1.244/)
> >>>>
> >>>>то у меня катастрофически растет количство зомби-процессов.
> >>>>С чем это может быть связано и что я делаю не так?
> >>>
> >>>С тем, что IO#popen порождает IO-объект, который не уничтожается.
> >>>Попробуйте вариант с блоком.
> >>
> >>Придется наверное.Хотя без него дюже красиво получается.
> >>
> >>Для IO есть методы close,но вот не соображу,куда мне его вызов поместить.
> >
> >Переписал код таким макаром
> >
> >ipt=IO::popen("iptables -nvL FORWARD")
> > ipt1=ipt.grep(/192.168.1.244/)
> > ipt.close_read
> >
> >Вроде теперь не зомбится.
>
> 1. А почему нельзя использовать стандартный grep? Зачем изобретать
> велосипеды?
> 2. Наверное вы хотели написать /192[.]168[.]1[.]244/ а не /192.168.1.244/ ?
>
> ipt=IO::popen("iptables -nvL FORWARD | grep /192[.]168[.]1[.]244/")
Системный греп не подходит,поскольку iptables|grep придется  вызывать на 
каждый ИП-адрес.
А так я все считываю в буфер и разбираю уже средствами руби.быстрее 
получается.
-- 
С уважением
Виктор В Исмакаев



More information about the Ruby mailing list