Обратите внимание, что exit(Pid, Reason)
и exit(Reason)
do NOT делают то же самое, если Pid
- это сам процесс. exit/1
сообщает текущему процессу о выходе - из внутри , если хотите - в то время как exit/2
отправляет сигнал выхода процессу, даже если процесс сам по себе. Поэтому, когда вы делаете exit(self(), normal)
, вы фактически посылаете себе сигнал выхода normal
, который игнорируется.
В этом случае помещение вызова exit
в конец функции не должно иметь никакого значения, поскольку процесс автоматически умирает (с причиной normal
), когда завершается функция, с которой он был запущен. Похоже, что процесс приостановлен где-то до этого.
proc_lib:sync_wait/2
вызывается внутри proc_lib:start/start_link
и сидит и ждет, когда порожденный процесс выполнит proc_lib:init_ack/1/2
, чтобы вернуть возвращаемое значение для запуска. Казалось бы, ваш процесс не вызывает init_ack
.