Hacker News new | past | comments | ask | show | jobs | submit login
Lsofgraph – Convert lsof output to graph of processes, pipes, fifos and sockets (github.com/zevv)
180 points by zevv on March 30, 2018 | hide | past | favorite | 17 comments




Hah, I wrote something very, very similar to this recently. The problem I eventually had with it was that lsof wasn't always installed on the hosts I was working with. So, it turned into a script to parse through /proc and other nonsense.

https://github.com/red-bin/lsofer/blob/master/lsofer.sh

(wish I could paste the graphing code, but it's code I wrote at my company.)


Cool! More interesting, I didn’t know the dot utility for creating the visual representations of the graphs. I can think of a bunch of uses for that.



dot (part of graphviz) is super handy.


Thank you for referencing the package dot is in!


systemd-analyze(1) supports dot(1) output to plot dependencies between units:

Quoting from the man page:

    EXAMPLES FOR DOT
       Example 1. Plots all dependencies of any unit whose name starts with "avahi-daemon"

           $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg
                 $ eog avahi.svg

       Example 2. Plots the dependencies between all known target units

           systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg
           $ eog targets.svg


I wish I had this when I started my career. I would have well slept more.


I might be missing something here, but shouldn't the graph be directed (processes opening fifos in read-only mode, or even unidirectional pipes like on Linux)? Or is it something impossible to query with lsof?

It otherwise is a very neat graphical overview of the state of a system!


afaik that info is not available from lsof, but I'm open to suggestions if there is more sensible data to extract from the output.


Slide 12 here[1] shows that lsof distinguishes the read and write ends of FIFOs at least. For TCP I suppose I makes sense to check which end uses ephemeral port.

[1] https://github.com/nh2/strace-pipes-presentation/blob/master...


True, info for FIFOs can be derived from lsof output, update follows.


That info is available. If a pipe fd is open for reading, then that's the fd for reading...


Now we just need to combine this with lstopo.


Waiting for your github posting (:


Cool! What's it's license?


Just added the LICENSE file, 2 clause BSD




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: