Linux kernel Linux中的进程在何时何地命名

Linux kernel Linux中的进程在何时何地命名,linux-kernel,Linux Kernel,我一直在努力遵循Linux上进程创建的流程。 到目前为止,我已经加入了一些debugprintk,以了解Linux内核上的pid分配。 但是,现在我希望在创建(或执行)PID时将其映射到二进制文件 我知道Linux创建进程的方式是先离开init,然后执行一个exec..,或者直接从init执行一个exec 我试图跟踪新的任务结构上的comm字段何时何地被填充。。 comm字段存储正在执行的二进制文件。 到目前为止,无论我在哪里尝试打印comm字段(在context\u开关期间执行),所有进程的名

我一直在努力遵循Linux上进程创建的流程。 到目前为止,我已经加入了一些debug
printk
,以了解Linux内核上的pid分配。 但是,现在我希望在创建(或执行)PID时将其映射到二进制文件

我知道Linux创建进程的方式是先离开init,然后执行一个exec..,或者直接从init执行一个exec

我试图跟踪新的
任务结构
上的
comm
字段何时何地被填充。。
comm
字段存储正在执行的二进制文件。 到目前为止,无论我在哪里尝试打印
comm
字段(在
context\u开关期间执行),所有进程的名称始终显示为
khelper

我尝试过大量调试
do_execve
函数,但它似乎不包含与更改
comm
字段相关的代码


有人能指出
comm
字段被分配的位置和时间吗?更正:函数是
fs/exec.c
中的
setup\u new\u exec
,它调用
setu task\u comm
,实际设置这个字段。

我发现
fs/exec.c
中的
setup\u new\u exec
填充了
comm
大多数用户进程的结构
task\u struct
中的字段。
但是,对于许多在内核内部启动的进程来说,这种情况似乎不会发生。

我记不起函数的名称,但我可以尝试为您找到它。它是实际读取ELF文件的函数。我相信您所说的函数实际上是linux 2.6.35中的do_execve(这是我正在使用的版本)。。遗憾的是,我在我知道的
do\u execve
字段中找不到任何更改,我的意思是
load\u elf\u binary
。请检查我的答案,以了解实际填充
comm
字段的函数。@user1761555同一文件中定义了两个函数,找到另一个并尝试该文件。在名为
fs/binfmt\u elf\u fdpic.c
的文件中声明了另一个fill\u psinfo,但该文件在compilation@user1761555试试这个,我以前考虑过内核转储,因为内核通常启动工作线程,这些线程在
kthread\u create