カーネルモジュールのfile_operation.read
ルーチン(つまり、どのプロセスが/dev/mydev
を読み込んでいる)をトリガーしたユーザープロセスのPIDを取得するにはどうすればよいですか?Linuxカーネルモジュールの作成時にユーザープロセスPIDを取得する
9
A
答えて
15
読み取り機能が実行されているときは、システムコールを発行したプロセスのコンテキストで実行されます。したがって、current
、つまりcurrent->pid
を使用する必要があります。
7
最近、sched.hにいくつかのヘルパ関数が定義されています。 pidの場合、次のように使用できます。
pid = task_pid_nr(current);
現在のタスクのpidを取得します。
ここでは、v3.8からinclude/linux/sched.h
からのコメントです。彼らは様々な名前空間からの を見ているよう
ヘルパーはタスクの異なるPIDを取得するために
)などで
- task_xid_nr():グローバルID、すなわち初期化の名前空間から見たID。
- task_xid_vnr():仮想ID、つまり現在のPID名前空間から見たIDです。
- task_xid_nr_ns():指定されたnsから見たID。
- set_task_vxid():タスクに仮想IDを割り当てます。
も(pid_nr参照
current->pid
が動作しない場合、それはすることによって行うことができる、カーネル2.6.39アームビルドオン/ linuxの/ pid.h
2
を含める:
pid_nr(get_task_pid(current, PIDTYPE_PID))
またはPIDTYPE_SID
で置換することができます。 Yasushiが指摘しているように、ヘッダソースはinclude/linux/pid.h
です。
どのアプローチが機能するかは、コードが使用するヘッダーファイルによって異なります。
現在は何ですか? readは引数として現在の値を取得しません。 ssize_t(* read)(構造ファイル*、char __user *、size_t、loff_t *); – 0x90
@ 0x90これはマクロです。 – cnicutar
http://kernelnewbies.org/FAQ/current、右? – 0x90