anonymous@RULINUX.NET~# | Last login: 2024-12-25 05:45:33 |
Регистрация Вход | Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск |
Форум - General | [RSS] |
Обнаружилась очень интересная бага. Суть такова:
Имеется консольная программка(циклическая при определенном вводе); если запустить её в долфине(т.е она будет выполняться в фоне), то после его закрытия родительским процессом становится init и этой программке что-то постоянно попадает на ввод. Следствием из этого является распухание ~/.xsession-errors до неимоверных размеров. У товарища /home забился под завалку.
Проверено на мандриве и генте. Не знаю специфично ли это для кде или долфина.
Проявляется ли данный баг у вас?
Так же возникает вопрос: Зачем stdout фигачить в .xsession-errors? Возможно это специфично только для КДЕ.
Вобщем дискас.
anonymous(*) (2010-01-30 00:21:00)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7
|
|
|
Скрыть
Re: Интересная бага> а ты уверен что это stdout а не stderr?
> //почему вместо багтрекера ты ты решил рассказать об этой теме тут?
anonymous(*)(2010-01-30 00:49:50)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> А что за прога, как она к иниту удщеряется - это демон что-ли?
Собственно после смены родителя к программе на стандартный ввод сыплется какая-то хренотень, и она забивает .xsession-errors своим выводом. Алсо, кирилическая часть вывода в .xsession-errors отсутствует. Если нужно могу приложить исходник проги. anonymous(*)(2010-01-30 00:54:51)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> После смерти родителя(долфина), её родителем становится инит. разве нет?
> Алсо, кирилическая часть вывода в .xsession-errors отсутствует
> Если нужно могу приложить исходник проги.
|
Скрыть
Re: Интересная бага> Дети по идее должны быть убиты в случае смерти их родителя.
> А asciiтичная присутствует?
> А что, они ещё не выложены нигде?
Но думаю тут дело не в качестве кода. На другой системе этот баг воспроизвели с другой программой. anonymous(*)(2010-01-30 01:22:55)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага>> А asciiтичная присутствует?
Я у себя попробовал программку попроще: При запуске конком, долфином, круннером и закрытии или прибитии родителя, программка действителбно перевешивается почему-то на init (интересно, если Х-ы закрыть оно продолжит крутиться, видимо?). Видимо так уж положено (типа закрыл долфин - это не значит что всё, что из него пускали должно быть прибито).. Но в .xsession-errors срёт строго только fprintf(stderr,..). |
Скрыть
Re: Интересная багану ежели известно то как ядро работает ... после кончины предка, ядро определяет предком незавершенного потомка (а ежели он зациклился, то как завершиться?) процесс инициализации - init. следовательно все переменные окружения и другие специфичные вещи процесс (неприбитый потомок) получает от init. только вот как он получает на вход мусор??? anonymous(*)(2010-01-30 02:56:43)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная бага> после кончины предка, ядро определяет предком незавершенного потомка (а ежели он зациклился, то как завершиться?) процесс инициализации - init.
> как он получает на вход мусор??
Т.е. проверяй не возвращает ли EOF вызов scanf() в функции displayMenu(). Если EOF - видимо надо завешать программу.. |
Скрыть
Re: Интересная бага> Он ловит EOF на попытке чтения stdin и возвращает управление не инициализировав перемунную selection.
anonymous(*)(2010-01-30 10:37:55)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная багаstdout и stderr направленны в .xsession_errors. stdin направлен в pipe очевидно который заканчивается при кончине предка. наверное как то так? есть еще мнения? кто нибудь в курсе как процесс в линуксе создает потомка, какие вещи наследуются потомком от предка? ну а впрочем проблема решена :) классный форум :) anonymous(*)(2010-01-30 14:30:12)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная бага> stdout и stderr направленны в .xsession_errors
|
anonymous(*)(2010-01-30 15:54:14)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
anonymous(*)(2010-01-30 15:57:35)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная бага> куда ведет pipe[:XXX]
В любом случае lsof может тебе помочь. |
Скрыть
Re: Интересная бага> А у меня почему stdout не перенаправился в .xsession_errors ?
anonymous(*)(2010-01-30 16:25:53)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага>> А у меня почему stdout не перенаправился в .xsession_errors ?
anonymous(*)(2010-01-30 16:51:27)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная багаuser@host ~ $ ls -lai /proc/6573/fd итого 0 46387 dr-x------ 2 user users 0 Янв 30 15:43 . 46069 dr-xr-xr-x 6 user users 0 Янв 30 15:43 .. 46392 lr-x------ 1 user users 64 Янв 30 15:43 0 -> pipe:[46055] 46393 l-wx------ 1 user users 64 Янв 30 15:43 1 -> /home/kaspar/.xsession-errors 46396 lrwx------ 1 user users 64 Янв 30 15:43 11 -> socket:[44993] 46397 lrwx------ 1 user users 64 Янв 30 15:43 16 -> socket:[45092] 46398 lrwx------ 1 user users 64 Янв 30 15:43 17 -> socket:[45044] 46399 lrwx------ 1 user users 64 Янв 30 15:43 18 -> socket:[45045] 46394 l-wx------ 1 user users 64 Янв 30 15:43 2 -> /home/kaspar/.xsession-errors 46395 lr-x------ 1 user users 64 Янв 30 15:43 7 -> /proc/2021/status id 2021 соответствует kdeinit4: kdeinit4 Running... насчет pipe это канал связи родительского и дочернего процесса, т.е. у нашей испытуемой программы на вход подается нечто от предка, на мой взгляд так это косяк кедов, почему на stdin не идет /dev/null, а поступает какая то кака от предка, после завершения этого предка, потомок ясен пень будет ловить EOF. кто согласен что кеды ведут себя в этом плане несколько не адекватно? anonymous(*)(2010-01-30 17:18:37)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная багаА, я понял куда вывод делся.. Но сперва про пайп. Я программку ту тестовую которую приводил выше, назвал "test_output_program_nah" - ну, по привычке что бы ни с чем не перепутать. Запустил из конка: Смотрим какие файлы у неё открыты: Нулевой дескриптор подключен к пайпу. Это единственный пайп, который она юзает. Смотрим кто юзает FIFO на ус-ве 0,6 которому соответствует inode 5004901: Неудивительно, что на другом конце пайпа болтается конк. Закрываем конк, тестовая программка переходит в собственность инита: Смотрим кто теперь владеет пайпом: А пайп другим концом ни к чему не подключен. Конк умер, а больше никому и не надо. Но вот чего непонятно - так это то, что согласно выхлопу lsof выше - у тестовой проги оба дескриптора 1 и 2 подключены к .xsession-errors - т.е. вывод должен идти от обоих fprintf'ов, но я у себя вижу только строчки с <STDERR>. Куда деваются <STDOUT> - видимо буферизуются. Добавил вызов "fflush(stdout);" в тестовый код и теперь вывод обоих fprintf'ов пошёл в .xsession-errors. Делаю man stdout и читаю там: "The stream stderr is unbuffered. The stream stdout is line-buffered when it points to a terminal. Partial lines will not appear until fflush(3) or exit(3) is called, or a newline is printed." Ничего не понимаю - newline же вроде как printed, а не печатало без флуша. Так что твоя система правильнее работает :) |
Скрыть
Re: Интересная бага> почему на stdin не идет /dev/null, а поступает какая то кака от предка
|
Скрыть
Re: Интересная багаскорее всего такое поведение возникает из-за glibc, кто его разберет как оно срабатывает. ну, думаю проблема разрешилась окончательно. ну а коли мы все так дружно к этому приложили усилия, теперь думаю имеет смысл подумать что с этим делать - забить, решить (написать патч) или написать кому-нибудь челобитную. как считаете? и все же как по мне, так это бага кед. на мой взгляд на stdin проги, должен вешаться /dev/null, что собственно и происходит в dolphin (с предком исследуемой программы). но по какому то разумению, dolphin вешает pipe на вход запускаемой программы. почему??? с какой целью??? вряд ли он мог что то туда послать или нет? anonymous(*)(2010-01-30 17:44:05)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Id(*)(2010-01-30 17:51:06)
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20091216 Iceweasel/3.5.6 (like Firefox/3.5.6; Debian-3.5.6-1) |
Скрыть
Re: Интересная баганесколько не верно выразился. но наличие pipe, который подразумевает обмен информацией, вместо /dev/null вызывает вопросы. у вас нет? может у вас есть ответы на них? anonymous(*)(2010-01-30 17:54:55)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная бага> оба дескриптора 1 и 2 подключены к .xsession-errors
Хотя согласен, что при написании программ стоит учитывать подобное поведение. Только откудаж было об этом узнать.. anonymous(*)(2010-01-30 17:57:20)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> и все же как по мне, так это бага кед. на мой взгляд на stdin проги, должен вешаться /dev/null
И пробуй на упрощённых тесткейсах, типа такого: И увидишь, что у тебя выход из scanf осуществляется при получении EOF, что правильно. А переменная c будет содержать то, что в ней до этого было или мусор - не важно, это по смыслу всё равно мусор раз вместо ввода получен EOF. |
Скрыть
Re: Интересная бага> несколько не верно выразился. но наличие pipe, который подразумевает обмен информацией, вместо /dev/null вызывает вопросы. у вас нет? может у вас есть ответы на них?
|
Скрыть
Re: Интересная бага> Вот только зачем это делается мне не понятно, зачем туда направлять stdout.
|
Скрыть
Re: Интересная бага> А куда его девать?
anonymous(*)(2010-01-30 18:14:02)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная багапофиксилось как только об этом узналось :) но все же несколько не логично с этим stdin. есть какой нибудь материал разъясняющий принципы и механизмы функционирования, а то у себя я таки ни чего не нашел :( anonymous(*)(2010-01-30 18:28:36)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная багаСтранно, что никто до сих пор не сказал, что пользователю в графической оболочке негоже мышью в бинарники тыкать - для этого должен быть приготовлен файл с расширением .desktop и всего-то :) А вот пихать под нос пользователю бинарники - это windows-way какой-то. anonymous(*)(2010-01-30 18:31:13)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная багаа так лучше бы она сразу завершилась как только получит EOF, чем на пол пути выполнения каких то операций, какого то потока, лишь от того что предок скончался :) глуповато как то выходит. не считаете? anonymous(*)(2010-01-30 18:35:41)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная багапсиходелика началась :) вот она воля случая. чисто случайно угодив мышью в бинарник хапнул горя, засрал весь хом :)))) и оголились несколько не очевидные но весьма занятные факты :) anonymous(*)(2010-01-30 18:39:29)
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009110807 Gentoo GranParadiso/3.0.14 |
Скрыть
Re: Интересная бага> В /dev/null конечно же. Если кому-нибудь понадобится этот самый stdout, то он его направит куда надо. А так только логи засорять. Тем более из названия .xsession-errrors следует, что там должны хранится всяческие ошибки.
|
Скрыть
Re: Интересная бага> а так лучше бы она сразу завершилась как только получит EOF, чем на пол пути выполнения каких то операций, какого то потока, лишь от того что предок скончался :) глуповато как то выходит. не считаете?
У проги есть выбор когда завершиться - по скончанию конка/долфина или по какому-то другому событию если ей насрать на EOF. Лог ошибок для того и служит что бы определить что что-то пошло не так (хотя при этом не совсем логично делать файл скрытым, т.е. с именем, начинающимся с точки..) и стандартный вывод тоже должен куда-то протоколироваться, при этом лучше что бы туда же, куда и stderr - а то потом замучаешься определять в какой последовательности у тебя происходил нормальный вывод и вывод ошибок (хотя буферизация, как мы видели выше, тут тоже подкладывает своё западло в моём случае). И надо учитывать, что дочерняя консольная прога может быть небесполезной при запуске таким способом. Консолльная программа может что-то там делать в фоне как например какой-нибудь бэкапный скрипт - тебе с ним не о чем разговаривать, всё что от него нужно - это успешно завершиться. Если этого не произошло - как узнать почему? Смотришь в тот самый файл. И чем больше информации будет в логе - тем легче изолировать проблему. В общем, я бы оставил всё как есть... |
Скрыть
Re: Интересная бага> У проги есть выбор когда завершиться - по скончанию конка/долфина или по какому-то другому событию если ей насрать на EOF.
> Лог ошибок для того и служит что бы определить что что-то пошло не так
Вкратце: не кошерное поведение пользователя влечет не кошерный отклик системы %) anonymous(*)(2010-01-30 19:24:18)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> бэкапный скрипт - тебе с ним не о чем разговаривать, всё что от него нужно - это успешно завершиться.
Мое мнение такое: не должно происходить вызова не графических прог из графики _пользователем_ anonymous(*)(2010-01-30 19:41:35)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> Сам факт запуска пользователем не графической программы из того же долфина мне кажется не совсем нормальным, т.к является бессмысленным -- пользователь не может в этом случае проконтролировать ход работы программы и даже судить о верном/не верном её завершении. Благо все спроектировано так, что вероятность этого стремится к нулю.
> Мне кажется, там все таки должны храниться ошибки. А для тестирования работы не графической проги(вот только может ли это понадобиться?) stderr и stdout можно направить вместе куда захочется тестеру.
> Вкратце: не кошерное поведение пользователя влечет не кошерный отклик системы %)
> И чтобы знать о ходе работы скрипта, ты бы все равно его запустил в терминале, чем постоянно заглядывать в .xsession-errors :)
> Мое мнение такое: не должно происходить вызова не графических прог из графики _пользователем_
|
Скрыть
Re: Интересная бага> Хочешь "конролировать" строчки, летящие со скоростью 20 экранов в секунду - запускай в терминале
>> Мое мнение такое: не должно происходить вызова не графических прог из графики _пользователем_
anonymous(*)(2010-01-30 20:45:22)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> Никому воскресать для этого не надо, и так вызова пользователем не графических прог из граф. оболочки не происходит. Многие не графические проги уже распиханы по менюхам и запускаются сразу в терминале(htop, octave, etc). И на виду у пользователя бинарники не валяются, чтобы тыкать в них ненароком.
|
Скрыть
Re: Интересная бага> Чо не так?
Скрипты без взаимодействия с пользователем хороши для автоматизации(те же бэкапы по крону), но не для пользовательских задач. anonymous(*)(2010-01-30 21:08:11)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная багаНу так принудиловки же нет - прогу можно запускать множеством разных способов как тебе удобнее. Нет резона ограничивать в этом пользователей. |
Скрыть
Re: Интересная бага> Нет резона ограничивать в этом пользователей.
anonymous(*)(2010-01-30 21:41:44)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> А логической разницы между ними нет.
anonymous(*)(2010-01-30 22:24:03)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> Логическое разделение по принципу взаимодействия с пользователем: одни используют терминал, другие - графический интерфейс.
|
Скрыть
Re: Интересная бага>а о логическом разделении графики и не графики. И что вероятность проявления сабжевой проблемы(переполнения /home логами)
|
Скрыть
Re: Интересная бага> К какой логической группе ты отнёс бы такую программу, гы-гы-гы?
Я, видимо, сегодня очень туманно излагаю мысли. Смысл всех моих опусов сводится вот к чему: Сабжевая проблема была вызвана тем. что пользователь ткнул мышью в не графическую программу и та загадила ему .xsession-errors. Так вот, эта проблема для линукса не актуальна т.к. у сферического пользователя в вакууме не валяются где-попало бинарники и вызов программ осуществляется через .desktop-файлы, а не графические программы лежат на своих местах подальше от шаловливых ручонок пользователя. Вот такое вот разделение. Утверждение, что "пользователь не должен запускать бинарники напрямую" стоит понимать как "у пользователя не должно возникнуть такой необходимости". Больше не знаю, как разжевать свою мысль :) anonymous(*)(2010-01-30 23:00:38)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
Скрыть
Re: Интересная бага> и почему у меня в хомяке нет логов(варлог для кого придумали?), а выводы перенаправляются в девнуль?
anonymous(*)(2010-01-30 23:03:28)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100110 Mandriva Linux/1.9.1.7-0.1mdv2010.0 (2010.0) Firefox/3.5.7 |
|
|
|
Этот тред читают 2 пользователя: |
Анонимных: 2 Зарегистрированных: 0 |
Re: Интересная бага
>Зачем stdout фигачить в .xsession-errors?
а ты уверен что это stdout а не stderr?
//почему вместо багтрекера ты ты решил рассказать об этой теме тут?
Googlebot/2.1 (+http://www.googlebot.com/bot.html)