spawn_monitor () и сообщения 'ВНИЗ' - PullRequest
2 голосов
/ 26 марта 2010

Возможно (теоретически), что процесс, который был spawn_monitor() 'ed, выходит (с нормальным завершением или при ошибке), не отправляя сообщение 'DOWN' родительскому процессу? У меня очень странная утечка процессов, похоже, что некоторые процессы не отправляют сообщение 'DOWN'. Я использую пакет Erlang, который поставляется с Ubuntu 9.10. Может быть, это известная ошибка?

Ответы [ 2 ]

1 голос
/ 27 марта 2010

Вам нужно будет показать код. Мониторинг - это ядро ​​работы Erlang.

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

Вы либо не пытаетесь получить сообщение о выходе, либо процесс не завершается.

Если у вас есть процессы с утечкой , похоже, что они на самом деле не завершаются.

Возможно, вы пытаетесь создать свой собственный модуль supervisor. Я настоятельно рекомендую использовать супервизор OTP, если вы хотите отключить и / или перезапустить дерево нормальных процессов.

0 голосов
/ 26 марта 2010

Может быть, вы контролировали процесс в какой-то момент?

Чтение из документа для erlang: demonitor / 1:

После возвращения erlang: demonitor (MonitorRef) гарантируется, что нет {'ВНИЗ', сообщение MonitorRef, _, _, _} из-за монитора будет размещен в очередь сообщений абонентов в будущее. A {'DOWN', MonitorRef, _, _, _} сообщение могло быть помещено в очередь сообщений вызывающих до позвони, хотя. Поэтому в большинстве случаях целесообразно удалить такие сообщение «ВНИЗ» из сообщения очередь после мониторинга была остановился. Эрл: demonitor (MonitorRef, [flush]) можно использовать вместо erlang: demonitor (MonitorRef), если это требуется очистка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...