Having fun with dot
Présentation
GraphViz est une application permettant de représenter graphiquement des graphes. Elle a été conçu par une équipe des laboratoires de recherches de AT&T. Elle est entièrement paramétrable, personalisation des formes, couleurs, polices de caractères ... Elle suppporte aussi beaucoup de formats de sortie : gif, jpg, png ... Afin d'en montrer la puissance et la simplicité du format en entrée : fichier .dot, je me suis amusé à écrire un script bash qui crée un graph de toute la hiérarchie des processus à l'aide de la commande ps. Ici j'utilise le générateur Dot qui je pense est le plus approprié pour le résultat souhaité.
Code
#!/bin/sh if [ $# -ne 1 ] then echo "Usage : $0 <type>" else if [ $1 != "PID" ] && [ $1 != "NAME" ] && [ $1 != "PID_NAME" ] then echo "type : - PID = Create graph with the pid of the different process" echo " - NAME = Create graph with the name of the different process" echo " - PID_NAME = Create graph with the name & pid of the different process" else if test -f ps_graph.dot then rm ps_graph.dot fi echo "digraph G{node [color=lightblue1, style=filled];" > ps_graph.dot ps -axo pid,ppid,command | tail -n +2| while read ligne; do PID=`echo $ligne | cut -d " " -f1` PPID=`echo $ligne | cut -d " " -f2` if [ $1 = "PID" ] then out="${PPID} -> ${PID};" else NAME=`echo $ligne | cut -d " " -f3` OLDNAME=`ps -p $PPID -o command | tail -n +2 | cut -d " " -f1` if [ $1 = "NAME" ] then out="\"${OLDNAME}\" -> \"${NAME}\";" else out="\"$PPID::${OLDNAME}\" -> \"$PID::${NAME}\";" fi fi echo $out >> ps_graph.dot done echo "}" >> ps_graph.dot dot ps_graph.dot -Tpng -o ps_graph.png fi fi
Résultat
Voir l'image en grand.