sistema reglas procesos para operativo manejo mac llamadas llamada interfaz calls administración linux-kernel system-calls kernel-module

linux-kernel - reglas - manejo de llamadas al sistema



Hacer una llamada al sistema para obtener una lista de procesos (2)

¿Por qué implementarías una llamada al sistema para esto? No desea agregar un syscall a la API de Linux existente. Esta es la interfaz principal de Linux para el espacio de usuario y nadie toca syscalls, excepto los principales desarrolladores de Kernel que saben lo que hacen.

Si desea obtener una lista de procesos y sus parámetros y estados en tiempo real, use /proc . Cada directorio que contiene un número entero es un ID de proceso existente y contiene un grupo de archivos dinámicos útiles que ps , top y otros usan para imprimir sus resultados.

Si desea obtener una lista de procesos dentro del núcleo (por ejemplo, dentro de un módulo), debe saber que los procesos se mantienen internamente como una lista doblemente enlazada que comienza con el proceso init (símbolo init_task en el kernel). Debe usar macros definidas en include/linux/sched.h para obtener procesos. Aquí hay un ejemplo:

#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);

Esto debería estar bien para recopilar información. Sin embargo, no cambies nada allí a menos que realmente sepas lo que estás haciendo (lo que requerirá un poco más de lectura).

Soy nuevo en la programación de módulos y necesito hacer una llamada al sistema para recuperar los procesos del sistema y mostrar cuánto CPU están consumiendo.

¿Cómo puedo hacer esta llamada?