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
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/.
Grazie, ho trovato qui il modo per farlo - https://web.archive.org/web/20120907161143/http://robert.sesek.com/thoughts/2012/1/debugging_mach_ports.html
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)