Я хочу написать небольшой модуль ядра Linux, который может показать мне PID всех запущенных процессов.
У меня есть следующий код:
/*
* procInfo.c My Kernel Module for process info
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
/*
* The init function, called when the module is loaded.
* Returns zero if successfully loaded, nonzero otherwise.
*/
static int mod_init(void)
{
printk(KERN_ALERT "ProcInfo sucessfully loaded.\n");
return 0;
}
/*
* The exit function, called when the module is removed.
*/
static void mod_exit(void)
{
printk(KERN_ALERT "ProcInfo sucessfully unloaded.\n");
}
void getProcInfo()
{
printk(KERN_INFO "The process is \"%s\" (pid %i)\n",
current->comm, current->pid);
}
module_init(mod_init);
module_exit(mod_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Rodrigo");
Как вы можете видеть, я знаю, что должен использовать структуру * struct task_struct *, чтобы получить PID и имя процесса, но я использую current , и я знаю о существовании некоторой двойной связи Круговой список, содержащий все печатные платы, поэтому главный вопрос:
Что мне нужно добавить, чтобы перебрать этот связанный риск с помощью p-next_task и p-prev_task, чтобы getProcInfo работал?
Спасибо!