#!/usr/bin/env pythonimport shlexfrom subprocess import popen,pipedef get_ps (): cmd = ' Ps ax -o pid,ppid,cmd ' P = popen (shlex.split (cmd), Stdout=PIPE) return p.stdout.readlines () [1:]def split (s): S = s.split () return s[0],s[1], ". Join (s[2:]) def parser_ps (data):p Rocs = []for l in data:pid,ppid,cmd = [i.strip () for i in split (L)]procs.append ({' PID ': Int (PID), ' Ppid ': Int (ppid), ' cmd ': cmd}) return Procsdef show (pid,procs,depth=1): root = [p for p in procs if p[' PID '] == pid][0]print '-' * depth,root[' pid '],root[' ppid '],root[' cmd ']childs = [proc for proc in procs if proc[' Ppid '] == pid]if childs: Depth += 1for c in childs:show (c[' pid '],procs,depth) if __name__ == ' __ main__ ':d Ata =&nbsP;get_ps () procs = parser_ps (data) show (1,procs)
This article from "Muzinan Technology blog" blog, declined reprint!
Python View process Tree