2012-08-11 11 views

答えて

15

読み取り機能が実行されているときは、システムコールを発行したプロセスのコンテキストで実行されます。したがって、current、つまりcurrent->pidを使用する必要があります。

+0

現在は何ですか? readは引数として現在の値を取得しません。 ssize_t(* read)(構造ファイル*、char __user *、size_t、loff_t *); – 0x90

+2

@ 0x90これはマクロです。 – cnicutar

+0

http://kernelnewbies.org/FAQ/current、右? – 0x90

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です。

どのアプローチが機能するかは、コードが使用するヘッダーファイルによって異なります。