open Kernel_task_struct
-let run debug { domname = domname; mem = mem }
- { utsname = utsname; tasks = tasks } =
- let utsname = Option.get utsname in
- let kernel_version = utsname.kernel_release in
- let init_task_addr = Option.get tasks in
-
- (* Starting at init_task, navigate through the linked list of
- * tasks (through tasks.next). The main program has already made
- * sure these are mapped into memory.
- *)
- let tasks =
- let rec loop acc task =
- let next = task.task_struct_tasks'next in
- if next <> init_task_addr then (
- let task = get_task_struct kernel_version mem next in
- let task = {
- task with
- task_struct_comm = truncate_c_string task.task_struct_comm
- } in
- let acc = task :: acc in
- loop acc task
- ) else
- acc
- in
- loop [] (get_task_struct kernel_version mem init_task_addr) in
+let run debug { domname = domname; mem = mem } { tasks = tasks } =
+ let tasks = Option.get tasks in
(* Sort tasks by PID. *)
- let cmp { task_struct_pid = p1 } { task_struct_pid = p2 } = compare p1 p2 in
+ let cmp { task_pid = p1 } { task_pid = p2 } = compare p1 p2 in
let tasks = List.sort cmp tasks in
printf " PID STAT COMMAND\n";
List.iter (
fun task ->
- printf "%5Ld %s\n" task.task_struct_pid task.task_struct_comm
+ printf "%5Ld %s\n" task.task_pid task.task_comm
) tasks
let summary = s_"list processes in virtual machine"
libvirt."
let () =
- Virt_mem.register "ps" summary description
- ~needs_utsname:true ~needs_tasks:true ~run
+ Virt_mem.register "ps" summary description ~needs_tasks:true ~run