Главная

Репликант помещается на Desktop как Zombie

У меня возникла следующая странная и неприятная проблема:

Когда я кладу на Десктоп репликант, тот инициализируется как Зомби. Причём это происходит не со всеми репликантами, а только с более тяжёлыми (SoundPlay и NetPositive становятся «Зомби», а Clock и All Possible Images — нет).

В FAQе на benews.ru написано, что репликант станет «Зомби», если Трэкер отобразит его раньше, чем он будет загружен (с другого диска). По–моему, это не совсем тот случай, потому что а) программы, которые я реплицирую, находятся на этом же диске; б) «зомбификация» происходит не после перезагрузки, а в момент помещения репликанта на Десктоп.

Я уже было и на Трэкер грешил, и поэтому переставил его, родимого, и tracker_shelf удалял, и Container`ом пользоваться пытался… Ничто не помогает. У кого–нибудь есть идеи, что делать дальше?

PS: В Зете всё работает без проблем, хоть слона реплицируй. Но, с другой стороны, там и Трэкер другой…


===========================================
Ну что, кто–нибудь знает, как с этим справиться?
===========================================

Re: Репликант помещается на Desktop как Zombie

Подтверждение — это хорошо, но его на хлеб не намажешь, и в /boot/home/config/settings не закинешь…

Ты с этой проблемой справился?

Re: Репликант помещается на Desktop как Zombie

Извините за неуместный вопрос, а что такое зомби?

Re: Репликант помещается на Desktop как Zombie

Зомби — это процесс, у которого нету папы.

Часто для того, чтобы ускорить работу, программу разделяют на несколько подпрограмм (processes, threads). Тогда одна часть программы может писать в файл, другая — ожидать подключения через сеть, а третья — сидеть на процессоре и производить сложные вычисления. Всё это вместе сильно сокращает время, затраченное на работу программы, но добавляет геморроя программистам.

Программа начинается с одного процесса. Этот процесс раздваивается с помощью команды fork. Получившиеся процессы зовутся «папа» и «сын» (в мужском роде — потому что процессы). Каждый из них потом сам может стать папой.

Когда процесс завершается, он останавливается, притворяется мёртвым и вывешивает перед собой табличку с кодом выхода (обычно 0, но не обязательно — это может быть любое число). Эту табличку должен забрать папа процесса, после чего «умерший» процесс считается окончательно мёртвым и исчезает, а отданные ему ресурсы (например, память) конфисковываются операционной системой в пользу других процессов. (Первый процесс программы по выходу уничтожается операционной системой, потому что у него тоже есть папа — это какой–то процесс в операционной системе).

По идее, папа должен ждать, пока все его дети (и дети его детей) завершат работу. Тогда он собирает со всех детей коды выхода, тем самым возвращает все ресурсы операционной системе, и только потом он может закончиться сам. Когда этого не происходит, «папа» сдыхает, операционка радостно забирает у него код выхода, и «папа» исчезает. После этого «дети», закончив свою работу, собираются «умереть», вывешивают свои коды выхода и ждут, когда кто–нибудь прийдёт забрать у них коды и отправить их на вечный покой. Но никто не приходит, потому что единственный, кто мог это сделать, сам уже умер, а другим до них дела нет — чужой процесс, значит, трогать нельзя, а то операционная система по рукам даст. И вот стоят эти дети, как тополя на кладбище, держат свои коды выхода, заботливо хранят свою память (которой никто пока пользоваться не может) и ждут, когда их кто–нибудь оставит покоиться в мире. Но никто не приходит. И так они стоят и ждут… До перезагрузки.

Что будет, если какой–то процесс набрал себе полгигабайта памяти и стал «зомби», — страшно себе представить.

Ну, конечно, не всё так плохо, и операционные системы (BeOS в частности) научились узнавать «зомби»–процессы, и пользователь может их теперь убить, и память у них может быть отобрана силой, но всё–таки «зомби» — это плохо. Очень плохо. Это означает, что где–то в программе ошибка, потому что «папа» умирает раньше «сына».

Надеюсь, в череде упрощений и аналогий я не слишком покривил против истины?

В нашем случае «зомби» — репликант, который, по–видимому, не может понять, к какой программе он относится. Может, потому, что код репликанта запускается раньше, чем он заменяется на код «папы», а может, по какой–то другой причине, но это означает, фактически, что репликант не работает.

___________
Операционные системы — единственная область, в которой Вы можете на полном серьёзе говорить, что Вам надо убить своих детей, чтобы они не превратились в зомби, и самому после этого умереть.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
c
L
f
q
T
n
Enter the code without spaces and pay attention to upper/lower case.