2013-08-23 8 views
5

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

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

+0

あなたは 'top'コマンドを参照していますか? – alfasin

+0

出力はトップコマンドのようですが、私はそれを行うシステムコールを実装する必要があります。 – douglasd3

答えて

13

なぜあなたはシステムコールを実装しますか?既存のLinux APIにsyscallを追加する必要はありません。これはユーザ空間に対する主要なLinuxインタフェースであり、誰も自分が何をするのかを知っているトップのカーネル開発者を除いて、syscallsに触れていません。

プロセスとそのパラメータとリアルタイムステータスのリストを取得する場合は、/procを使用してください。そこに整数であるすべてのディレクトリには既存のプロセスIDがあり、pstopなどの出力をプリントするのに便利な動的ファイルがたくさんあります。

カーネル内のプロセスリスト(モジュール内など)を取得する場合は、プロセスがinitプロセス(カーネルのシンボル)で始まる二重リンクリストとして内部的に保持されていることがわかります。 。プロセスを取得するには、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); 

これは情報を収集するためには大丈夫です。しかし、あなたが何をしているのかを本当に知っていない限り、そこにあるものは変更しないでください(もう少し読む必要があります)。

+0

これを使用する方法とそれがどのように機能するかに関するいくつかの説明を提供できますか? –

+0

まあ、開始タスクを取得する必要があります。これはしばしばマルコである「現在」によって行われます。これで、現在実行中のタスクを取得できます。それは仕事と一緒に戻ります。次に、それを使って今度は反復を開始できます。 – Wandy

0

これには、openとreadと呼ばれるシステムコールがあります。すべてのプロセスの情報はすべて/proc/{pid}ディレクトリに保存されています。対応するファイルを読むことによってプロセス情報を収集することができます。

詳細はこちらhttp://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

関連する問題