X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ps%2Fvirt_ps.ml;h=7d8534c151af98eaabdd15e6787d91a8fd7454bf;hb=e69d89c1c07ea7b79160a37c36b7cc02dd5eecbd;hp=065b4c36ec59a69e5bdba1709a9999cf85ce433e;hpb=97131d94f5513b732f8f8d310984e71d8201cadf;p=virt-mem.git diff --git a/ps/virt_ps.ml b/ps/virt_ps.ml index 065b4c3..7d8534c 100644 --- a/ps/virt_ps.ml +++ b/ps/virt_ps.ml @@ -21,9 +21,45 @@ open Printf open Virt_mem_gettext.Gettext open Virt_mem_utils -open Virt_mem_mmap +open Virt_mem_types -let run debug images = () + +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 + + 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 + ); + + 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 "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 -> () let summary = s_"list processes in virtual machine" let description = s_"\