Как я уничтожаю процесс в Erlang, зная, что только имя модуля раньше запускало его?

Как я уничтожаю процесс в Erlang, зная, что только имя модуля раньше запускало его?

6
задан Zubair 21 February 2010 в 18:33
поделиться

3 ответа

Нет способа сделать это.

Лучше всего спекулировать на основе зарегистрированного имени и / или первоначального вызова ваших процессов.

4
ответ дан 8 December 2019 в 17:21
поделиться

Вы все равно можете найти процесс другими способами, даже если он не зарегистрирован. Например, вы можете взглянуть на монитор процесса, такой как pman (pman: start ()), и посмотреть, найдете ли вы его там. pman позволяет фильтровать по многим критериям, которые могут привести вас к правильному процессу. Или вы можете запустить отладчик, установить точку останова в модуле, и в следующий раз, когда процесс что-то сделает, он будет прерван, отладчик откроет окно, а в строке заголовка вы сможете прочитать PID процесса, который был прерван.

Когда у вас есть PID, вы можете использовать pid (A, B, C). чтобы создать из него объект PID в оболочке и использовать его для уничтожения процесса.

1
ответ дан 8 December 2019 в 17:21
поделиться

Если это для простой отладки, вы можете запустить pman: start () и просто искать процесс (дважды щелкните запись, чтобы увидеть подробности, например как первоначальный звонок). Затем вы можете убить его напрямую из pman.

В противном случае вы можете использовать erlang: process () для вывода списка всех процессов в системе (ужасно, я знаю) и запускать erlang: process_info (Pid, initial_call) для каждого из них, чтобы найти нужный процесс. Как только вы это сделаете, просто используйте exit (Pid, kill).

9
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: