Убить процесс в MacOS X


4 0

У меня программы зависают не так часто, и в большинстве случаев падаем ModoDevelop, XCode, MAMP или Word. Как видишь большинство из этого относится к программированию. О зависании Microsoft Word я уже писал, у него есть прямо болезнь какая-то при вставке текста. Я в Word очень часто пишу тексты для заметок, а потом с помощью Command+V расставляю теги типа <p>. Проблема в том, что при выполнении Command+V иногда Word зависает. Его убивать достаточно просто, достаточно нажать Option+Command+Esc (почти аналог Ctrl+Alt+Del), появляется окно выбора программы, выбираем Word и нажимаем Force Quit.

Среды разработки – ModoDevelop и XCode, просто падают. Они не зависают, а вылетают с ошибкой. Так что их убивать не приходится. Ну а MAMP иногда зависает при перезагрузке компьютера. Это бесит, потому что это останавливает процесс перезагрузки и никаких предупреждений. Просто перезагрузка не идет. В первый раз я начал методом тыка убивать программы и после того, как убил MAMP, перезагрузка пошла без проблем.

Проблема MAMP в том, что если это происходит, то MaxOS уже забывает те программы, которые он закрыл до косяка с MAMP и после перезагрузки восстанавливает только те окна, которые он закрыл уже после начала второго этапа перезагрузки (после убийства MAMP). В принципе, это происходит редко, и если я не забываю, то я еще и выгружаю MAMP до начала перезагрузки, поэтому проблема не сильно страшная.

Но вот вчера впервые столкнулся с зависанием процесса, а не программы. Я как программист работаю с XCode и балуюсь с iPhone программированием. Вчера наткнулся на косяк, когда эмулятор iPhone стал игнорировать любые запуски программы примера, с которым я работал. Запускаю пример, а он вылетает с ошибкой SIGABRT.

Полез на закладку Debug, чтобы увидеть, что там произошло, а мне говорят, что ошибка SIGABRT может возникать, если программа уже выполняется в системе, и ОС не может запустить еще один процесс. Оки, начинаю искать кто может выполнятся. В окне терминала вбиваю:

ps –el | grep 'Z'

и вижу, что действительно, в системе есть зомби моего процесса. Эмулятор не смог убить его по какой-то причине и теперь он висит в системе. Пробовал убить процесс с помощью:

kill PID
kill -9 PID

Без результата. Процесс просто не реагирует и система его не убивает. Причем не говорит при этом совершенно ничего. Я сначала подумал, что у меня не хватает прав, но из под sudo не убивает тоже. Только полная перезагрузка помогла. Неприятный косяк. Если это будет происходить часто, то меня это не обрадует.

Пробовал воспроизвести ошибку, и получается, что при запуске OpenGL приложения, если не нажать в эмуляторе кнопку выхода, а снять задачу из XCode или попытаться запустить приложение из XCode еще раз, то оно запросто остается в памяти и XCode начинает показывать ошибку SIGABRT. Сегодня попробовал несколько раз запускать приложение и выходить из него прежде чем запускать его еще раз и пока зависонов не видел.

Интернет говорит, что народ начал часто наталкиваться на такие проблемы после перехода на последнюю MacOS и на XCode 4. Конкретной таблетки я не встречал, но удивлен, что косяк не исправлен до сих пор. Проблема явно в эмуляторе. Да и удивлен, что снять процесс не удается. Все пишут, что им приходится перезагружать полностью систему. Говорят, что если зомби процесс виден в программе Activity Monitor, то его можно убить в командной строке или в той же программе Activity Monitor. Если монитор его не видит, то лекарством становится перезагрузка.

Сейчас экспериментировать с процессами времени нет, буду корректно выходить из программы перед обновлением эмулятора, но если еще раз процесс умрет, буду дальше разбираться, почему он неубиваем.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

klamm

06 Февраля 2012

Зомби же нельзя убить, он и так уже умер и спасет только reboot) Или я не прав?


Юрий

06 Февраля 2012

Михаил, скажи, а тебе удалось включить проверку грамматики в Word для MacOS?


Михаил Фленов

06 Февраля 2012

Зомби же нельзя убить, он и так уже умер и спасет только reboot) Или я не прав?


Есть разные определения зомби. Например, некоторые определяют его как процесс, который реально умер, но осталась запись в таблице о нем. Тут в данном случае не только запись. Остались занятыми какие-то ресурсы, которые не позволяют запуститься другой копии.

Можно ли убить зомбик? Вот честно - не знаю. Столько лет работаю с Linux, Cygwin и вот впервые встречаю такое, что приходится перезагружать. Удивлен, очень сильно удивлен. Даже в Windows таких косяков нет.

Михаил, скажи, а тебе удалось включить проверку грамматики в Word для MacOS?


Включена без проблем


Михаил Фленов

06 Февраля 2012

Судя по интернету, зомби процессы убивать можно и нужно. Нужно убить родительский процесс и зомби должен умереть сам. Мне постоянно приходится работать с cron и работы регулярно падают. Много раз убивал процессы, но ни разу не перезагружал систему.

Я буду очень сильно удивлен, если в MacOS зомбиков убивать нельзя. В наше время, когда космические карабли бороздят галактику, убивать какие-либо процессы перезагрузкой - смешно.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне