2013-02-22 19 views
4

我一直在嘗試遵循Linux上的進程創建流程。目前爲止,我已經加入了一些調試printk來理解Linux內核上的pid分配。 但是,現在我希望將PID映射爲二進制文件,因爲它們正在創建(或執行)。何時何地在Linux中命名的進程

我知道Linux的創建流程的方式是通過派生關閉初始化,然後直接由init做一個exec..or做一個exec ..

我試圖跟蹤何時何地在球場上comm新的task_struct正在填充.. comm字段存儲正在執行的二進制文件。 到目前爲止,無論在哪裏我嘗試打印(在context_switch功能時execept)的comm場,所有流程始終顯示自己的名字作爲khelper

我已經嘗試過廣泛的調試功能do_execve,但少了點似乎包含與comm場的改變代碼..

有人能指出何時何地comm字段分配

+0

我不記得功能的名稱關閉我的頭頂,但我可以嘗試找到它您。這是實際讀取ELF文件的函數。 – 2013-02-22 22:08:48

+0

我相信你所說的函​​數實際上是linux 2.6.35(這是我正在使用的版本)的do_execve .. 很遺憾,我可以發現沒有改變'comm'字段 – 2013-02-22 22:11:23

+0

我知道'do_execve',我的意思是'load_elf_binary'。請檢查我的答案是否實際填寫了'comm'字段。 – 2013-02-22 22:16:30

回答

3

更正:該功能是在setup_new_execfs/exec.c調用set_task_comm實際上設置了這個字段。

+0

令人驚訝的是,該功能從來沒有爲我執行.. – 2013-02-22 22:17:37

+0

@ user1761555他們有兩個在同一個文件中定義,找到另一個,並嘗試一個。 – 2013-02-22 22:19:58

+0

在一個名爲'fs/binfmt_elf_fdpic.c'的文件中聲明瞭另一個fill_psinfo,但該文件在編譯過程中甚至沒有包含。 – 2013-02-22 22:26:01

0

我發現setup_new_exec in fs/exec.c對於大多數用戶進程填充結構task_struct中的comm字段。 但是,這似乎並沒有發生在內核本身開始的很多進程..

+0

因爲內核通常會啓動工作線程,並在'kthread_create'中的某個地方命名 – 2013-02-22 22:34:26