Inspired by this Post, i started playing around with ps, nodejs and GraphViz.
After reading some ps man Pages, i found the necessary ps parameters.
For MacOS i used
ps -A -c -o pid,ppid,pcpu,comm,uid -r
For Linux i used
ps -A -o pid,ppid,pcpu,comm,uid
You then get some Output like:
PID PPID %CPU COMMAND UID 1 0 0.0 init 0 2 1 0.0 kthreadd 0 3 2 0.0 migration/0 0 4 2 0.0 ksoftirqd/0 0 5 2 0.0 migration/0 0 6 2 0.0 watchdog/0 0
So you are getting the ProcessID, the Parent ProcessID, CPU Usage (i am not using for plotting atm), the Command and the UserID.
I created a simple Node Script, that you can run either directly under MacOS (for all other Unices you need to update the ps command).
Or you can give the script a previous generated ps output for parsing:
plotPS.sh /tmp/host.log > /tmp/host.dot
The resulting DOT Code is then Piped into a DOT File.
Here are some examples:
My MacOS Laptop:
A Sinlge Linux Host with Dovecot and Apache2/Passenger:
A Linux Host with OpenVZ and KVM Instances:
In the original Post, there were also Dependencies between CPU Usage and Size of the Graphical Nodes, also it would be more useful to only plotting the processes of one VM from its inside.
But i guess for one evening the result is okay :-).