Очень длинный заголовок у заметки получился, но при этом достаточно ёмкий. Столкнулся я со странной проблемой, которая заставила меня встревожиться. Дело в том, что недавно я обновил систему на своей рабочей машинке до OS X Capitan, и, в принципе, был готов к любому исходу (что, возможно, будут какие-то артефакты в виде недообновлённых значков, или, к примеру, что какая-нибудь из программ, которыми я пользуюсь, попросту не заработала бы на обновлённой системе), однако то, что у меня сможет зависать вся система - к этому я был совершенно не готов…
В общем-то, когда по непонятным причинам в конце рабочего дня при привычном обряде выхода из всех программ и выключении компьютера я словил зависание в первый раз, то списал на то, что что-то, возможно, неправильно сделал. Благо я ещё и торопился уйти. Но когда это повторилось во второй раз, стало понятно, что такое поведение вызывает одно из приложений при закрытий, и я решил с этим разобраться. Признаюсь честно, у меня подозрения сразу пали на iTerm, так как накануне проблем я пробовал т.н. «ночные сборки» сей замечательной программы, и мог допустить, что что-то в ней поломал. Вернулся на последнюю релизную версию и проработал день в ней, а в конце рабочего дня решил-таки понаблюдать, что же вообще происходит. Разумеется, проблема повторилась и на релизной версии, только не в самом iTerm. В списке процессов всё процессорное время стал отжирать процесс notifyd, и очень скоро система полностью просто перестала реагировать на что-либо и пришлось жёстко её вырубать.
Оказалось, что с виновником я почти угадал, проблема действительно проявлялась при закрытии iTerm, но не обязательно его. Дело в том, что я в повседневной работе пользуюсь tmux’ом (tmux - terminal multiplexer), и проблема возникает именно в этой связке, только при закрытии, и только когда эта связка работает достаточно долго. В целом можно почитать по данной проблеме этот тред в форуме разработчиков Apple, а также эту проблему в проекте tmux. Судя по всему, проблема в обработке событий, и похоже что какое-то из этих событий перестало работать как положено в новой версии ОС от Apple. Там же можно найти и быстрое решение данной проблемы, которое я опробую в самое ближайшее время, - поставить частоту обновления статус-бара в tmux равной нулю:
set -g status-interval 0
Эту команду следует поместить в ваш конфигурационный файл .tmux.conf.