Add .gitignore file for git.
[virt-mem.git] / ps / virt_ps.ml
1 (* Memory info for virtual domains.
2    (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
3    http://libvirt.org/
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *)
19
20 open Printf
21
22 open Virt_mem_gettext.Gettext
23 open Virt_mem_utils
24 open Virt_mem_types
25
26 open Kernel
27
28 let run debug { addrmap = addrmap } =
29   (* Grab all the task_struct structures. *)
30   let tasks = AddrMap.fold (
31     fun _ v tasks ->
32       match v with
33       | _, Some (_, _, Task_struct task) -> task :: tasks
34       | _ -> tasks
35   ) addrmap [] in
36
37   (* Sort tasks by PID. *)
38   let cmp { task_struct_pid = p1 } { task_struct_pid = p2 } = compare p1 p2 in
39   let tasks = List.sort cmp tasks in
40
41   printf "  PID STAT COMMAND\n";
42
43   List.iter (
44     fun { task_struct_pid = pid; task_struct_comm = comm } ->
45       let comm = truncate_c_string comm in
46       printf "%5Ld      %s\n" pid comm
47   ) tasks
48
49 let summary = s_"list processes in virtual machine"
50 let description = s_"\
51 virt-ps prints a process listing for virtual machines running under
52 libvirt."
53
54 let () =
55   Virt_mem.register "ps" summary description ~needs_tasks:true ~run