2

私は、特定のタスクのために実行されているすべてのプロセスを処理するLinuxカーネルモジュールに取り組んでいます。'X'という名前の特定のプロセスがまだ実行されているかどうか、およびその現在の状態を知ることは可能ですか?

4

2 に答える 2

1

コードの準備ができました..これを試すことができます..

#include<linux/init.h>
#include<linux/module.h>
#include<linux/sched.h>

MODULE_LICENSE("GPL");
static int info_init(void)
{
    struct task_struct *iTask;
    for_each_process(iTask) {
            printk(KERN_INFO "Process Info \nName: %s\nState:%ld\n",iTask->comm, iTask->state);
    }
    return 0;
}

static void info_exit(void)
{
    printk(KERN_INFO "Tata Bye-bye from Anshul");
}

module_init(info_init);
module_exit(info_exit);

実行後、

dmesg

コマンドを実行すると、すべてのプロセス名とその状態を確認できます。

于 2013-03-07T06:05:00.937 に答える
1

Linux のすべてのタスクは、構造 (PCB/TCB) 、つまりプロセス/タスク制御ブロックによって表されます。これはstruct task_structとして実装されています。プロセスに関するすべての情報が含まれています。すべての PCB はリンク リストに配置されており、それをたどって必要な情報を抽出できます。モジュール内で、この作業を行うヘルパーとしてカーネル スレッドを開始できます。

于 2013-03-07T06:20:51.123 に答える