Как я уничтожаю процесс в Erlang, зная, что только имя модуля раньше запускало его?
Нет способа сделать это.
Лучше всего спекулировать на основе зарегистрированного имени и / или первоначального вызова ваших процессов.
Вы все равно можете найти процесс другими способами, даже если он не зарегистрирован. Например, вы можете взглянуть на монитор процесса, такой как pman (pman: start ()), и посмотреть, найдете ли вы его там. pman позволяет фильтровать по многим критериям, которые могут привести вас к правильному процессу. Или вы можете запустить отладчик, установить точку останова в модуле, и в следующий раз, когда процесс что-то сделает, он будет прерван, отладчик откроет окно, а в строке заголовка вы сможете прочитать PID процесса, который был прерван.
Когда у вас есть PID, вы можете использовать pid (A, B, C). чтобы создать из него объект PID в оболочке и использовать его для уничтожения процесса.
Если это для простой отладки, вы можете запустить pman: start () и просто искать процесс (дважды щелкните запись, чтобы увидеть подробности, например как первоначальный звонок). Затем вы можете убить его напрямую из pman.
В противном случае вы можете использовать erlang: process () для вывода списка всех процессов в системе (ужасно, я знаю) и запускать erlang: process_info (Pid, initial_call) для каждого из них, чтобы найти нужный процесс. Как только вы это сделаете, просто используйте exit (Pid, kill).