Я новичок в программировании модулей, и мне нужно сделать системный вызов для извлечения системных процессов и показать, сколько CPU они потребляют.Сделать системный вызов для получения списка процессов
Как я могу позвонить?
Я новичок в программировании модулей, и мне нужно сделать системный вызов для извлечения системных процессов и показать, сколько CPU они потребляют.Сделать системный вызов для получения списка процессов
Как я могу позвонить?
Зачем вам осуществить системный вызов для этого? Вы не хотите добавлять системный вызов в существующий Linux API. Это основной интерфейс Linux для пользовательского пространства, и никто не касается системных вызовов, кроме топ-разработчиков ядра, которые знают, что они делают.
Если вы хотите получить список процессов и их параметры и статусы в реальном времени, используйте /proc
. Каждый каталог, в котором есть целое число, есть существующий идентификатор процесса и содержит кучу полезных динамических файлов, которые 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);
Это должно быть хорошо для сбора информации. Однако ничего не меняйте, если вы действительно не знаете, что делаете (что потребует немного больше чтения).
Можете ли вы дать некоторое объяснение тому, как это использовать и как это работает –
Ну, вам нужно получить стартовую задачу. Это часто делается «текущим», который является маркой. С этим вы можете получить текущую задачу. Он вернется с заданием. Затем вы можете начать с ним итерацию. – Wandy
Для этого есть системные вызовы, называемые открытыми и считанными. Информация всех процессов хранится в каталогах /proc/{pid}
. Вы можете собирать информацию о процессе, читая соответствующие файлы.
Больше описано здесь: http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
Вы имеете в виду 'top' команды? – alfasin
Вывод похож на верхнюю команду, но мне нужно выполнить системный вызов, который делает это. – douglasd3