【问题标题】:How do you get the current process ID in Mac kernel extension code?如何在 Mac 内核扩展代码中获取当前进程 ID?
【发布时间】:2018-04-26 18:17:18
【问题描述】:

我最初试图在我的 OS X/macOS 内核模块中使用 getpid(),有没有办法获取我的 kext 在内核中运行的进程的 PID(进程 ID)?我可以使用现有的函数或变量吗?

【问题讨论】:

  • 因为searching Google for "getpid() on mac" 作为其第一个结果返回the Mac getpid(2) man page,它清楚地表明您需要#include <sys/types.h>#include <unistd.h>,您的问题中都没有提到它们。 #facepalm 确实如此。
  • 我遇到了我在内核中尝试这个的问题,我认为 getpid() 不适用于内核
  • 进程ID是什么?内核扩展不是进程。
  • @duskwuff 我需要使用我的 kext 打印出进程的 PID
  • @AndrewHenle:OP 没有询问如何获取他们的代码所在进程的 PID,因为他们的代码不是用户进程的一部分。他们在询问如何获取发起请求并导致其内核扩展被调用的进程的 PID。

标签: macos kernel pid kernel-extension xnu


【解决方案1】:

要获取当前运行的内核线程关联的进程的PID,调用proc_selfpid() function;你需要在你的 kext 代码中#include <sys/proc.h> 来获取原型。如果您的代码在某种系统调用回调的上下文中运行,PID 当然只会对应于用户进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多