summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xpkgs/shell/dtach-list32
1 files changed, 32 insertions, 0 deletions
diff --git a/pkgs/shell/dtach-list b/pkgs/shell/dtach-list
new file mode 100755
index 0000000..1e77a3d
--- /dev/null
+++ b/pkgs/shell/dtach-list
@@ -0,0 +1,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