| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > как правильно обработать закрытие pipe? |
| Автор: mishnik 29.3.2011, 15:08 | ||
| Что делает скрипт: читает из зипа нужный кусок и выходит из цикла чтения раньше, чтобы сэкономить время P.S. :все происходит на продуктиве $showrev Release: 5.10 Kernel architecture: sun4u Application architecture: sparc Hardware provider: Sun_Microsystems Kernel version: SunOS 5.10 Generic_142900-09 ставить доплнительные модули perl я не могу (типа Archive::Zip,IO::Compress::Zip) Есть код на perl, который идеально проходит через perlclitic по Brutal (report all violation), но при выполнении perl pipe_quest.pl unable to close: unzip -c test.zip utp.live.stp.published.messages.txt at pipe_quest.pl line 29 формирует файл, который нужно, но выдает ошибку, как обработать эту ошибку правильно, чтобы ее не было? если close $FH; вообще не обрабатывать, то код не проходит по perlcritic да и это может вызвать утечку памяти, если файл большой (>10Gb) и закрыть пайп все-таки нужно будет, контролируя эту утечку.
|
| Автор: Pfailed 30.3.2011, 21:35 |
| Почему не может закрыть? Потому что на том конце еще не завершился процесс? Тогда завершить этот процесс принудительно через kill. |
| Автор: mishnik 5.4.2011, 12:08 | ||
как-то через kill - некрасиво, он сам доожен завершиться по brokeen pipe,мне бы только хотелось понять как поймать этот $SIG{'PIPE'} и обработать его, чтобы все было под контролем |
| Автор: Pfailed 5.4.2011, 19:34 |
| SIGPIPE вам не надо ловить он не в вашей программе происходит. Ситуация такая: Вы закрываете канал. Анзипу приходит SIGPIPE и он завершается. Естественно завершается с ненулевым кодом возврата. В документации по close() сказано, что если подпроцесс завершается с ненулевым кодом, то close() возвратит ложное значение. Имеет смысл игнорировать значение, возврашаемое close в данном случае. |
| Автор: mishnik 7.4.2011, 15:06 | ||||
хотя это не совсем то, что мне хотелось, но получается так
пускай будет так, хотя и душа не лежит к этому решению |
| Автор: mishnik 7.4.2011, 15:26 | ||
как говориться итоговый вариант - finish for today Pipe_quest.pl:
проходит perlcritic по brutal |