プロセスIDを指定して,それに対応するtask_struct
構造体を取得したいのですが,うまくいかないので質問させていただきます.
調べたところ,find_task_by_vpid
関数を使用することで取得できるようですが,手元のマシンではこの関数を使用できませんでした.
実行環境は,
- カーネルバージョン: 4.4.70
- ディストリビューション: Ubuntu16.04
です.
ソースコードと実行結果は以下の通りです.
/* main.c */ #include <unistd.h> #include <linux/sched.h> int main() { pid_t pid_n; struct task_struct *task; pid_n = getpid(); task = find_task_by_vpid(pid_n); return 0; }
$ gcc -o main main.c main.c: In function 'main': main.c:17:9: warning: implicit declaration of function 'find_task_by_vpid' [-Wimplicit-function-declaration] task = find_task_by_vpid(pid_n); ^ main.c:17:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion] task = find_task_by_vpid(pid_n); ^ /tmp/zsh-1000/ccjKucyL.o: In function `main': main.c:(.text+0x1b): undefined reference to `find_task_by_vpid' collect2: error: ld returned 1 exit status
find_task_by_vpid
が宣言されていないようだったので/usr/include/linux/sched.h
を調べたところ,find_task_by_vpid
関数は宣言されていませんでした./usr/include/sched.h
等も調べましたが見つかりませんでした.
#include <linux/sched.h>
でヘッダファイルをインクルードすることで使用できるようにしているサイトが多いと感じましたが,find_task_by_vpid
は上記のバージョンのLinuxでは使用できないのでしょうか.
もしくは,使用方法が間違っているのでしょうか.
また,目的がtask_struct
構造体を取得することなので,他に良い方法がありましたら教えていただきたいです.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/19 07:06 編集
2017/10/19 07:18