2012-02-19 41 views
6

Ứng dụng của tôi nhận được thông báo IPC mach và trả về câu trả lời cho người gọi. Tôi có người gọi mach port(msgh_remote_port) và tôi muốn biết PID của người gọi. Tôi có thể tìm thấy trên OSX bằng cổng mach a PID muốn nghe cổng mach cụ thể không?PID nào lắng nghe trên cổng máy đã cho

Trả lời

2

Cổng mach không được liên kết trực tiếp với quy trình, mà thay vào đó là với tác vụ. Nhiệm vụ sau đó được liên kết với cấu trúc quy trình bsd. Để truy vấn các cổng của một tác vụ, bạn có thể sử dụng hàm mach_port_names. Để có được tất cả các cổng mach mở lặp qua tất cả các nhiệm vụ và sử dụng chức năng được đề cập ở trên.

Cách tiếp cận khác là sử dụng hệ thống tệp procfs. Hệ thống tập tin procfs được cài đặt trên hệ thống tập tin cầu chì và cần được cài đặt thủ công trên hệ thống. Nó là một giải pháp mã nguồn mở. Một khi hệ thống tập tin procfs được cài đặt, bạn có thể truy vấn các cổng của một tác vụ bằng cách truy cập tập tin/proc/proc-id/task/ports. Hãy xem http://osxbook.com/book/bonus/chapter11/procfs/.

0

Ba cách bạn có thể làm điều này mà không có một kext:

  • hệ thống launchctl in (hoặc tên miền khác)
  • lsmp -a (không có tên cổng, chỉ cần id)
  • procexp tất cả các cổng | grep the_service_name_you_want

    (procexp là một add on cụ từ http://NewOSXBook.com/tools/procexp.html)

Các vấn đề liên quan