2012-02-19 11 views
6

Mi aplicación recibe mensajes mach IPC y devuelve respuestas para los llamantes. Tengo la llamada de Mach port(msgh_remote_port) y quiero saber PID de la persona que llama. ¿Puedo encontrar en OSX el puerto mach a PID que escuche el mach mach específico?Qué PID escucha en un puerto mach determinado

Respuesta

2

El mach puerto no está directamente asociado con un proceso, sino con una tarea. La tarea se asocia luego con la estructura de proceso bsd. Para consultar los puertos de una tarea, puede usar la función mach_port_names. Para obtener todos los puertos abiertos, itere sobre todas las tareas y use la función mencionada anteriormente.

Un enfoque diferente es usar el sistema de archivos procfs. El sistema de archivos procfs se implementa en la parte superior del sistema de archivos de fusibles y debe instalarse manualmente en un sistema. Es una solución de código abierto. Una vez que el sistema de archivos procfs está instalado, puede consultar los puertos de una tarea accediendo al archivo/proc/proc-id/task/ports. Eche un vistazo al http://osxbook.com/book/bonus/chapter11/procfs/.

0

tres maneras que usted puede hacer esto sin un kext:

  • sistema de impresión launchctl (u otro dominio)
  • lsmp -a (sin nombres de puertos, solo ids)
  • procexp todos los puertos | grep the_service_name_you_want

    (procexp es un complemento en la herramienta de http://NewOSXBook.com/tools/procexp.html)

Cuestiones relacionadas