2010-02-21 10 views

risposta

4

Non c'è modo di farlo.

La soluzione migliore è speculare in base al nome registrato e/o alla chiamata iniziale dei processi.

+0

nel caso in cui qualcuno che sta cercando l'API per ottenere il pid per nome registrato, invoca 'whereis (RegisteredName)' –

9

Se è per il debug semplice, è possibile eseguire pman: start() e cercare il processo (fare doppio clic su una voce per visualizzare dettagli come la chiamata iniziale). Puoi quindi ucciderlo direttamente da pman.

In caso contrario, è possibile utilizzare Erlang: processi() per elencare tutti i processi nel sistema (orribile, lo so), e Erlang run: process_info (Pid, initial_call) su ciascuno di loro di trovare il giusto processo. Una volta fatto, basta usare exit (Pid, kill).

+0

Ma la chiamata iniziale non ha nulla a che fare con il modulo che ha generato il processo. O... ? – Zed

+0

No, quell'informazione non è stata salvata da nessuna parte. – RichardC

1

È ancora possibile trovare il processo con altri mezzi, anche se non è registrato. Ad esempio, potresti dare un'occhiata a un monitor di processo come pman (pman: start()) e vedere se lo trovi lì. pman ti permette di filtrare per molti criteri, il che potrebbe portare al processo giusto. Oppure puoi avviare il debugger, installare un breakpoint nel modulo e la volta successiva che il processo fa qualcosa, verrà interrotto, il debugger aprirà una finestra e nella barra del titolo potrai leggere il PID del processo che è stato interrotto.

Una volta ottenuto il PID, è possibile utilizzare pid (A, B, C). forgiare un oggetto PID sulla shell da esso, e usarlo per uccidere il processo.

Problemi correlati