私はモジュールのプログラミングが初めてで、システム プロセスを取得して、それらが消費している CPU の量を表示するためにシステム コールを行う必要があります。
どうすればこの電話をかけることができますか?
私はモジュールのプログラミングが初めてで、システム プロセスを取得して、それらが消費している CPU の量を表示するためにシステム コールを行う必要があります。
どうすればこの電話をかけることができますか?
なぜこれにシステムコールを実装するのですか? 既存の Linux API に syscall を追加したくない。これはユーザー空間への主要な Linux インターフェースであり、syscall に触れるのは、彼らが何をしているかを知っているトップ カーネル開発者だけです。
プロセスとそのパラメータ、およびリアルタイム ステータスのリストを取得する場合は、 を使用します/proc
。そこに整数であるすべてのディレクトリには、既存のプロセス ID があり、出力を印刷するために使用する便利な動的ファイルがps
多数top
含まれています。
カーネル内 (モジュール内など) のプロセスのリストを取得したい場合、プロセスはinit
プロセス (カーネル内のシンボルinit_task
) で始まる二重リンク リストとして内部的に保持されることを知っておく必要があります。プロセスを取得するには、 で定義されたマクロを使用する必要がありinclude/linux/sched.h
ます。次に例を示します。
#include <linux/module.h>
#include <linux/printk.h>
#include <linux/sched.h>
static int __init ex_init(void)
{
struct task_struct *task;
for_each_process(task)
pr_info("%s [%d]\n", task->comm, task->pid);
return 0;
}
static void __exit ex_fini(void)
{
}
module_init(ex_init);
module_exit(ex_fini);
これで情報収集はOKです。ただし、自分が何をしているのかを本当に理解していない限り、そこにあるものは何も変更しないでください (もう少し読む必要があります)。