5

私はモジュールのプログラミングが初めてで、システム プロセスを取得して、それらが消費している CPU の量を表示するためにシステム コールを行う必要があります。

どうすればこの電話をかけることができますか?

4

2 に答える 2

12

なぜこれにシステムコールを実装するのですか? 既存の 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です。ただし、自分が何をしているのかを本当に理解していない限り、そこにあるものは何も変更しないでください (もう少し読む必要があります)。

于 2013-08-23T19:11:45.373 に答える