find_task_by_vpidを追ってみる
Rev.1を表示中。最新版はこちら。
サンプルでお世話になっているfind_task_by_vpidを追ってみました。これはプロセスIDからtask_structを取得するものです。task_structにはstruct pid_link pids[PIDTYPE_MAX]が紐づいていて、この配列の添え字にそって、PIDTYPE_PID | プロセスID |
PIDTYPE_TGID | スレッドグループID |
PIDTYPE_PGID | プロセスグループID |
PIDTYPE_SID | セッションID |
全プロセスIDをリストしているpid_hashから、まずpid構造体を取得します。pid構造体にはこのpidを使用しているtaskがリストされており、これからtask_strucを取得するというものでした。
流れは以下の通りです。(kernel/pid.c)
find_task_by_vpid find_task_by_pid_type_ns find_pid_ns pid_task