summaryrefslogtreecommitdiff
path: root/pf
diff options
context:
space:
mode:
Diffstat (limited to 'pf')
-rwxr-xr-xpf38
1 files changed, 38 insertions, 0 deletions
diff --git a/pf b/pf
new file mode 100755
index 0000000..95c8e92
--- /dev/null
+++ b/pf
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+set -ue
+
+get_parent () {
+ ps hoppid p$1
+}
+
+get_children () {
+ ps hopid --ppid "$1"
+}
+
+get_ancestors () {
+ case $1 in
+ 1|'') :
+ ;; *) get_ancestors $(get_parent $1)
+ esac
+ echo "$1"
+}
+
+get_descendents () {
+ for c in $(get_children "$1")
+ do echo "$c"
+ get_descendents "$c"
+ done
+}
+
+declare -i p
+for p in "$@"
+do
+ [[ $p -ne 0 ]] && {
+ get_ancestors "$p"
+ get_descendents "$p"
+ } | {
+ readarray -t pids
+ ps -Hf "${pids[@]}" | sed "/^[^ ]* *$p /s/.*/&/"
+ }
+done