[CRIU] [PATCH 2/3] crit: The 'ps' explorer
Andrew Vagin
avagin at virtuozzo.com
Tue Dec 15 03:10:37 PST 2015
On Mon, Dec 14, 2015 at 01:20:04PM +0300, Pavel Emelyanov wrote:
> Shows process tree from image. The output is like
>
> PID PGID SID COMM
> 1 1 1 session00
> 4 4 4 session00
> 7 7 7 session00
> 8 4 4 session00
> 11 11 11 session00
> 12 4 4 session00
> 13 13 13 session00
> 14 14 14 session00
> 15 4 4 session00
> 6 4 4 session00
> 10 9 9 session00
>
> (the above is for session00 test).
>
Appreciated-by: avagin at openvz.org
> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
> ---
> crit | 42 ++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/crit b/crit
> index f054dcf..0b500b2 100755
> --- a/crit
> +++ b/crit
> @@ -2,6 +2,7 @@
> import argparse
> import sys
> import json
> +import os
>
> import pycriu
>
> @@ -52,7 +53,44 @@ def info(opts):
> # Explorers
> #
>
> -explorers = { }
> +class ps_item:
> + def __init__(self, p, core):
> + self.pid = p['pid']
> + self.ppid = p['ppid']
> + self.p = p
> + self.core = core
> + self.kids = []
> +
> +def show_ps(p, opts, depth = 0):
> + print "%7d%7d%7d %s%s" % (p.pid, p.p['pgid'], p.p['sid'],
> + ' ' * (4 * depth), p.core['tc']['comm'])
> + for kid in p.kids:
> + show_ps(kid, opts, depth + 1)
> +
> +def explore_ps(opts):
> + pss = { }
> + ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
> + for p in ps_img['entries']:
> + core = pycriu.images.load(dinf(opts, 'core-%d.img' % p['pid']))
> + ps = ps_item(p, core['entries'][0])
> + pss[ps.pid] = ps
> +
> + # Build tree
> + psr = None
> + for pid in pss:
> + p = pss[pid]
> + if p.ppid == 0:
> + psr = p
> + continue
> +
> + pp = pss[p.ppid]
> + pp.kids.append(p)
> +
> + print "%7s%7s%7s %s" % ('PID', 'PGID', 'SID', 'COMM')
> + show_ps(psr, opts)
> +
> +
> +explorers = { 'ps': explore_ps }
>
> def explore(opts):
> explorers[opts['what']](opts)
> @@ -98,7 +136,7 @@ def main():
> # Explore
> x_parser = subparsers.add_parser('x', help = 'explore image dir')
> x_parser.add_argument('dir')
> - x_parser.add_argument('what', choices = [ ])
> + x_parser.add_argument('what', choices = [ 'ps' ])
> x_parser.set_defaults(func=explore)
>
> # Show
> --
> 1.9.3
>
>
More information about the CRIU
mailing list