2010-02-21 24 views

Respuesta

4

No hay forma de hacerlo.

Su mejor opción es especular basándose en el nombre registrado y/o la llamada inicial de sus procesos.

+0

en caso de que alguien que está buscando la API para obtener pid por nombre registrado, invoque 'whereis (NombreRegistrado)' –

9

Si se trata de depuración simple, puede ejecutar pman: start(), y simplemente busque el proceso (haga doble clic en una entrada para ver detalles como la llamada inicial). Luego puedes matarlo directamente de pman.

De lo contrario, podría usar erlang: processes() para enumerar todos los procesos en el sistema (horrible, lo sé), y ejecutar erlang: process_info (Pid, initial_call) en cada uno de ellos para encontrar el proceso correcto. Una vez que hayas hecho eso, solo usa exit (Pid, kill).

+0

Pero la llamada inicial no tiene nada que ver con el módulo que generó el proceso. O ...? – Zed

+0

No, esa información no se guarda en ningún lado. – RichardC

1

Aún puede encontrar el proceso por otros medios, incluso si no está registrado. Por ejemplo, podría echar un vistazo con un monitor de proceso como pman (pman: start()) y ver si lo encuentra allí. pman le permite filtrar por muchos criterios, lo que podría llevarlo al proceso correcto. O puede iniciar el depurador, instalar un punto de interrupción en el módulo y la próxima vez que el proceso haga algo, se interrumpirá, el depurador mostrará una ventana y en la barra de título podrá leer el PID del proceso que fue interrumpido.

Una vez que tenga el PID, puede usar pid (A, B, C). forjar un objeto PID en el shell desde él y usarlo para matar el proceso.

Cuestiones relacionadas