【问题标题】:How to access the task_struct behind a process not currently running?如何访问当前未运行的进程后面的 task_struct?
【发布时间】:2019-10-24 22:12:22
【问题描述】:

我正在研究另一种管理睡眠进程的方法,为了我的实验,我需要制作一个修改后的 Linux 内核。对于我正在制作的内容,我需要访问描述进程的 task_struct,即使它是当前正在运行的进程。我需要这样做,以便我可以为我建议的睡眠方法更新 task_struct 的字段。

TL;DR 我如何访问当前不在 CPU 上运行的进程的 task_struct。我会知道它是 PID。

【问题讨论】:

  • “如何访问”是什么意思?您想找到 task_struct 的特定进程吗?如果是这样,您知道有关进程的哪些信息(名称、pid 等)?或者您知道task_struct 的一个进程,但询问您在访问该结构的字段时需要使用哪种同步?在某些情况下,在读取进程的字段时持有 RCU 锁 (rcu_read_lock()) 就足够了。但在其他情况下,您需要其他类型的同步。请让问题更具体;目前是不清楚你有什么,你想要什么。
  • @alinsoar:当您删除“C”标签时,不确定您所说的“C 编程的离题”是什么意思。 Linux 内核是用 C 编写的,问题(可能)是关于完成所需工作的 C 函数/宏。问题本身是否包含C代码与标签的需求无关。
  • @Tsyvarev 他的问题 95% 与 Linux 相关,5% 与 C 相关。伽罗瓦理论也在 C 中的密码库中实现,但在这里问伽罗瓦问题是没有意义的。
  • @alinsoar:但问题不在于 抽象 理论或算法。它是关于 Linux 内核的,它主要用 C 实现。需要一些 C 知识才能理解问题和可能的答案。要查找和编写有关 Linux 内核的问题的答案,需要更多的 C 知识。我会恢复“C”标签,但只有在问题变得清晰之后。
  • @Tsyvarev 问题在这里不清楚,因为它与 C 没有链接。它是针对 #linux 主题的。

标签: linux process kernel task


【解决方案1】:

find_task_by_vpid() in sched.h(假设最近的内核)。

正如@Tsyvarev 所提到的,在调用它之前有(很多)同步问题需要解决,因此请了解它的调用者做了什么,这样你就不会自责了。

【讨论】:

    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多