X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ps%2Fvirt_ps.ml;h=07e5e76bba4b9fb37abf2dccd100077a7adce182;hb=a0c427833305fc543c6bc0f34cffc3197f3d3761;hp=94301ce87e7f23f8ef648569672342f3a000b184;hpb=8a8c035f78a41d68ba62bb35a6fba503481324e2;p=virt-mem.git diff --git a/ps/virt_ps.ml b/ps/virt_ps.ml index 94301ce..07e5e76 100644 --- a/ps/virt_ps.ml +++ b/ps/virt_ps.ml @@ -21,16 +21,35 @@ open Printf open Virt_mem_gettext.Gettext open Virt_mem_utils -open Virt_mem_mmap - -let usage = s_"NAME - virt-ps - process listing command for virtual machines - -SUMMARY - virt-ps [-options] [domains] - -DESCRIPTION - virt-ps prints a process listing for virtual machines running under - libvirt." - -let debug, images = Virt_mem.start usage +open Virt_mem_types + +open Kernel + +let run debug { addrmap = addrmap } = + (* Grab all the task_struct structures. *) + let tasks = AddrMap.fold ( + fun _ v tasks -> + match v with + | _, Some (_, _, Task_struct task) -> task :: tasks + | _ -> tasks + ) addrmap [] in + + (* Sort tasks by PID. *) + let cmp { task_struct_pid = p1 } { task_struct_pid = p2 } = compare p1 p2 in + let tasks = List.sort cmp tasks in + + printf " PID STAT COMMAND\n"; + + List.iter ( + fun { task_struct_pid = pid; task_struct_comm = comm } -> + let comm = truncate_c_string comm in + printf "%5Ld %s\n" pid 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 ~needs_tasks:true ~run