LINUX.ORG.RU

сказка на ночь


0

1

Мои дорогие друзья, сегодня вечеромночьюутром я расскажу как не надо писать программы.

Жила-была большая программа. И вот она странно заглючила: в консольке писалось terminated без видимых причин. Знакомо, правда? После убития всех кронов, ненужных демонов и прочей нечисти проблема... осталась, причём заметил что умирают все дочерние процессы вместе с родительским. Логично было предположить что прога хитрым образом себя сама прибивает, но нет, strace молчит. Дошло дело до systemtap. И, о ужас, оказалось сигнал посылается коммандой perf которой я статистику собираю.

Пока разбирался с кодом выловил кучу багов с тредами и chdir(), аккуратно расставил блокировки... Но аккелла промахнулся и в одном месте упустил это. А perf, написанный великими гуру Инго Молнаром, просто берёт и kill(0, SIGTERM). Т.е. всю группу процессов грохает нафиг без разбора и ругани.

Ну чо, я стал умнее. Но если клава чешится написать про мои умственные способности то не сдерживайте себя, форум всё стерпит.

★★★★★

Да ладно... я как то бился в истерике о клаву, код вылизан до блеска а не работает... я его правил-правил, чистил-чистил - не работает... Посадил рядом товарища, тот посмотрел - да, все правильно... но не работает! В общем я все тесты делал локально (и все было хорошо), а боевую версию на серваке ТУПО ЗАБЫВАЛ ОБНОВЛЯТЬ. Спать надо утром/днем/ночью... а не сигналы ловить;-)

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Что сказать-то хотел?

как не надо писать программы. Я не только о своей поделке.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

было у меня такое :(

такое было у каждого :)

После убития всех кронов, ненужных демонов и прочей нечисти проблема... осталась

но при этом perf ты даже не подумал вырубить? :)

xydo ★★
()
Ответ на: комментарий от xydo

но при этом perf ты даже не подумал вырубить? :)

нельзя, именно его показания мне и нужны.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от xydo

собстно я вырубал его, проблема в том что

1) это был race condition в моей проге и баг был нестабильный

2) я думал он целенаправленно мочит родителя и прошерстил сырцы, но не нашёл там kill(parent_pid).

3) в голову не могло придти такое дурацкое поведение, об этом ни слова ни сказано в доках.

Главное что я понял это не оставлять известных багов в проге. Я знал об этой фигне, но т.к. скрипт был тестовый то я думал все возможные последствия это просто exit-status будет не нулевой. А между тем perf был переписан в последних версиях и они там много чего накрутили, блин.

true_admin ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.