summaryrefslogtreecommitdiffstats
path: root/pkgs/shell/dtach-list
blob: 1e77a3d27cf18057e0c816a1d3ecccea4041c6b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#! /bin/sh
#!buildShellBin path=coreutils:findutils:gawk:gnugrep:gnused:iproute2:psmisc
#
# NAME
#       dtach-list - list dtach sessions
#
# SYNOPSIS
#       dtach-list
#
set -efu

workdir=$(mktemp -d -t dtach-list.XXXXXXXX)
readonly workdir
trap 'cd / && rm -r "$workdir"' EXIT
cd "$workdir"

ss -HQpx > ssclients

ss -HQlpx | sed -nr 's/  +/ /g; s/^u_str LISTEN ([^ ]+) [0-9]+ \* 0 users:\(\("dtach",pid=([0-9]+),fd=3\)\) $/\2 \1/p' | sort -n > sockets

while read -r pid sock; do
  connections=$(awk -v sock="$sock" '$3==sock{n++}BEGIN{n=0}END{print n}' ssclients)
  pstree -TUalp "$pid" >pstree
  if test "$connections" = 0; then
    sed '
      1s/$/ (detached)/
      s/.*/\x1b[38;5;202m&\x1b[m/
    ' pstree
  else
    cat pstree
  fi
done <sockets