X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ps%2Fvirt_ps.ml;h=fe538a9f15b17e3230cce4bce64abe01e4726865;hb=a877867243635176be3dc7735520fdd9a4098e10;hp=7d8534c151af98eaabdd15e6787d91a8fd7454bf;hpb=e69d89c1c07ea7b79160a37c36b7cc02dd5eecbd;p=virt-mem.git diff --git a/ps/virt_ps.ml b/ps/virt_ps.ml index 7d8534c..fe538a9 100644 --- a/ps/virt_ps.ml +++ b/ps/virt_ps.ml @@ -23,47 +23,26 @@ open Virt_mem_gettext.Gettext open Virt_mem_utils open Virt_mem_types +open Kernel_task_struct -let run debug ({ domname = domname; mem = mem }, ksymmap, utsname) = - try - let kernel_version = - match utsname with - | None -> - eprintf (f_"%s: could not guess kernel version\n") domname; - raise Exit - | Some { kernel_release = v } -> v in +let run debug { domname = domname; mem = mem } { tasks = tasks } = + let tasks = Option.get tasks in - if not (Kernel_task_struct.known kernel_version) then ( - eprintf (f_"%s: %s: unknown kernel version -Try a newer version of virt-mem, or if the guest is not from a -supported Linux distribution, see this page about adding support: - http://et.redhat.com/~rjones/virt-mem/faq.html\n") domname kernel_version; - raise Exit - ); + (* Sort tasks by PID. *) + let cmp { task_pid = p1 } { task_pid = p2 } = compare p1 p2 in + let tasks = List.sort cmp tasks in - let init_task = - let addr = - try Ksymmap.find "init_task" ksymmap - with Not_found -> - eprintf (f_"%s: could not find init_task in kernel image\n") domname; - raise Exit in - let addr = - (Virt_mem_mmap.unsafe_typed_addr_of_addr addr : - [ `task_struct ] Virt_mem_mmap.typed_addr) in - Kernel_task_struct.get kernel_version mem addr in + printf " PID STAT COMMAND\n"; - printf "comm = %S prio = %Ld state = %Ld static_prio = %Ld tasks'next = %Lx\n" - init_task.Kernel_task_struct.comm - init_task.Kernel_task_struct.prio - init_task.Kernel_task_struct.state - init_task.Kernel_task_struct.static_prio - (Virt_mem_mmap.unsafe_addr_of_typed_addr init_task.Kernel_task_struct.tasks'next); - - with Exit -> () + List.iter ( + fun task -> + printf "%5Ld %s\n" task.task_pid task.task_comm + ) tasks let summary = s_"list processes in virtual machine" let description = s_"\ virt-ps prints a process listing for virtual machines running under libvirt." -let () = Virt_mem.register "ps" summary description ~run +let () = + Virt_mem.register "ps" summary description ~needs_tasks:true ~run