4

Linuxでのプロセス作成の流れをたどろうとしています。これまで、printkLinuxカーネルでのpidの割り当てを理解するために、いくつかのデバッグを行いました。ただし、PIDが作成(または実行)されるときに、PIDをバイナリにマップしたいと思います。

Linuxがプロセスを作成する方法は、initをフォークしてから、execを実行するか、initから直接execを実行することです。

comm新しいフィールドがいつどこでtask_struct埋められているかを追跡しようとしています。このcommフィールドには、実行中のバイナリが格納されます。これまでのところ、commフィールドを印刷しようとしても(関数中context_switchを除く)、すべてのプロセスは常に名前を次のように表示します。khelper

関数のデバッグを広範囲に試みましたが、フィールドdo_execveの変更に関連するコードが含まれていないようです。comm

commフィールドが割り当てられている場所と時期を誰かが指摘できますか

4

2 に答える 2

3

訂正:関数はsetup_new_exec、実際にこのフィールドを設定fs/exec.cする呼び出しに含まれています。set_task_comm

于 2013-02-22T22:12:05.513 に答える
0

ほとんどのユーザープロセスの構造体のフィールドにinsetup_new_execが入力されていることがわかりました。ただし、これは、カーネル自体の内部で開始される多くのプロセスでは発生しないようです。fs/exec.ccommtask_struct

于 2013-02-22T22:31:28.813 に答える