节点配置文件中的___mac_get_pid符号是什么?

时间:2016-10-16 19:44:02

标签: c++ node.js pid

我正在分析在OSX上运行的一些多进程nodejs代码。

我看到了:

[C++]:
   ticks  total  nonlib   name
  23398   63.6%   63.8%  ___mac_get_pid

什么是___mac_get_pid?它的名字肯定暗示它是一些在Mac上获得PID的代码,但时间似乎过长了。

谷歌搜索没有提供任何有用的东西。

1 个答案:

答案 0 :(得分:3)

__mac_get_pidmac_get_pid库函数后面的系统调用。手册页mac_gethttp://man.cx/mac_get(3)

中对此进行了描述
  

mac_get_pid ..获取文件,套接字,套接字对等或进程的标签   mac_get_pid()和mac_get_proc()系统调用返回与任意进程ID或当前进程关联的进程标签。

     

必须首先使用mac_prepare(3)函数分配和准备用于这些调用的标签存储。当使用标签完成应用程序时,可以使用mac_free(3)返回内存。

这里的“MAC”不是Mac OS X / macOS,而是POSIX.1eMandatory Access Control(“作为TrustedBSD项目的一部分在FreeBSD 5.0中引入”)。 mac_get_pidimplemented in macOS/Dawrin/XNU为“扩展的非POSIX.1e接口”。

可能在使用的nodejs库中有一些方法尝试使用进程列表(如ps / top)进行详细的工作,但是他们无法限制其请求的速率。使用分析器获取带有mac_get_pid的多个堆栈跟踪(不是v8 profiler仅堆栈跟踪js,但是一些外部分析器连接到nodejs进程)或使用调试器(gdb / lldb)通过手动停止和检查回溯直到找到谁mac_get_pid(当你不在mac_get_pid时继续并再次停止)是找到谁调用它的必要步骤。