2012-02-19 15 views
6

La mia applicazione riceve i messaggi IPC del computer e restituisce le risposte per i chiamanti. Ho il chiamante mach port(msgh_remote_port) e voglio sapere PID del chiamante. Posso trovare su OSX tramite la porta mach uno PID che ascolta per la porta del Mach specifico?Quale PID è in ascolto su una determinata porta Mach

risposta

2

La porta mach non è direttamente associata a un processo, ma invece a un'attività. L'attività è quindi associata alla struttura del processo bsd. Per interrogare le porte di un'attività è possibile utilizzare la funzione mach_port_names. Per ottenere tutte le porte mach aperte itera su tutte le attività e usa la funzione sopra menzionata.

Un approccio diverso è l'utilizzo del filesystem procfs. Il filesystem procfs è implementato sul filesystem del fusibile e deve essere installato manualmente su un sistema. È una soluzione open source. Una volta installato il filesystem procfs, è possibile interrogare le porte di un'attività accedendo al file/proc/proc-id/task/ports. Dai uno sguardo a http://osxbook.com/book/bonus/chapter11/procfs/.

0

Tre modi si può fare questo senza un kext:

  • sistema di stampa launchctl (o un altro dominio)
  • LSMP -a (nessun nome di porta, solo id)
  • procexp tutte le porte | grep the_service_name_you_want

    (procexp è un add on strumento da http://NewOSXBook.com/tools/procexp.html)

Problemi correlati