Linux上的PCB在哪里


10

PCB或过程控制块在Wikipedia上定义如下

进程控制块(PCB,也称为任务控制块,[1] Task Struct或Switchframe)是操作系统内核中的数据结构,其中包含管理特定进程所需的信息。PCB是“操作系统中进程的体现”

其职责是:

Process identification data
Processor state data
Process control data

那么在哪里可以找到工艺的PCB?


另请参见Linux on Stack Overflow中的过程控制块

Answers:


15

在Linux内核中,每个进程都由task_struct双向链接列表中的表示,其头是init_task(pid 0,而不是pid 1)。这通常称为过程表

在用户模式下,普通用户可以看到过程表/proc。以您的问题的标题为准:

  • 流程标识数据是流程ID(位于path中/proc/<process-id>/...),命令行(cmd)以及其他可能的属性,具体取决于您对“ identification”的定义。

  • 过程状态数据包括调度数据(schedstatschedstat),什么的进程当前等待(wchan),它的环境(environ)等。

  • 流程控制数据可以说是其凭证(uid_map)和资源限制(limits)。

因此,这全都取决于您如何定义术语...但是通常,有关流程的所有数据都可以在中找到/proc


“其头是init_task(pid 0,而不是pid 1)”没有这样的东西init_task。它是init,其pid为1,而不是0(通过确认pidof init)。
AleksandrH

1
@AleksandrH init_task是内核结构而不是进程。它指向由pid 0内部表示的空闲任务。init_task和init是完全不同的东西。
Flu

pid仅适用于流程...
AleksandrH '18

1
@AleksandrH在内核源代码树(github.com/torvalds/linux/blob/master/init/init_task.c)中读取init / init_task.c 。
Flup
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.