Какой PID прослушивает данный порт Mach - PullRequest
6 голосов
/ 19 февраля 2012

Мое приложение получает сообщения об IPC и возвращает ответы для абонентов.У меня есть вызывающий абонент port(msgh_remote_port), и я хочу узнать PID вызывающего абонента.Могу ли я найти на OSX через порт Маха PID, который прослушивает определенный порт Маха?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

Порт Маха напрямую не связан с процессом, а вместо этого с задачей.Затем задача ассоциируется со структурой процесса bsd.Для запроса портов задачи вы можете использовать функцию mach_port_names.Чтобы получить все открытые порты Mach, итерируйте по всем задачам и используйте вышеупомянутую функцию.

Другой подход - использовать файловую систему procfs.Файловая система procfs реализована поверх файловой системы fuse и должна быть установлена ​​в системе вручную.Это решение с открытым исходным кодом.После установки файловой системы procfs вы можете запрашивать порты задачи, открывая файл / proc / proc-id / task / ports.Посмотрите на http://osxbook.com/book/bonus/chapter11/procfs/.

0 голосов
/ 02 августа 2017

Три способа сделать это без ключа:

  • Система печати launchctl (или другой домен)
  • lsmp -a (без имен портов, только идентификаторы)
  • procxp все порты |grep the_service_name_you_want

    (procxp - инструмент для добавления из http://NewOSXBook.com/tools/procexp.html)

0 голосов
/ 22 февраля 2012

Спасибо, я нашел здесь способ сделать это - https://web.archive.org/web/20120907161143/http://robert.sesek.com/thoughts/2012/1/debugging_mach_ports.html

...