2013-07-17 4 views
1

У меня есть два отдельных сценария, и я пытаюсь инициировать выполнение одного сценария (дочернего процесса) из другого скрипта (родительского процесса) с использованием механизма pipe, такого как open ($ fh, '- |', ./monitor.pl ") здесь monitor.pl - это дочерний процесс, так что оба они выполняются асинхронно и одновременно. Выход команд, помещенных внутри цикла while дочернего процесса, записывается в дескриптор трубы непрерывно по этой причине буфер заполняется. Поэтому, пожалуйста, предложите мне механизм и соответствующее местоположение, чтобы очистить буфер таким образом, чтобы дочерний процесс никогда не зависал, когда буфер заполняется.Очистка буфера Perl

+0

Ваше чтение $ fh в родительском процессе? –

+0

да чтение $ fh в родительском процессе. Plz. можете ли вы предложить мне какой-либо механизм. – 7Srv

+0

Итак, ребенок быстрее предоставляет данные, чем родительский, при чтении и обработке данных? –

ответ

1

См. IO::Handle.

Автоматически вровень после написания:

$fh->autoflush(1); 

Flush вручную:

$fh->flush; 

На версиях Perl ниже 5.14 вы также должны загрузить IO :: Handle модуль:

use IO::Handle qw(); 
+0

Где я должен использовать этот оператор $ fh-> autoflush (1); сразу после открытия трубы, как этот 'code'open ($ fh, '- |'," ./monitor.pl "); $ Fh-> AutoFlush (1); 'code' – 7Srv

+0

Да ............ – daxim

+0

Вышеупомянутый механизм не работает в сценарии сценария. Выполнение дочернего процесса monitor.pl инициируется с использованием этого механизма канала open ($ fh, '- |', "./monitor.pl") из родительского процесса. Родительский процесс может выполняться в течение нескольких часов, и дочерний процесс также должен выполняться до тех пор, пока родительский процесс будет выполняться асинхронно, но дочерний процесс зависает через 50 минут. Я хочу, чтобы дочерний процесс записывался в дескриптор трубы, пока выполняется родительский процесс, который может составлять 2-3 часа. Plz. предложите мне любой механизм, который может мне помочь. Заранее спасибо. – 7Srv

Смежные вопросы