The problem#
Last week, I mentioned that I needed a hack to
kill xprop
that seemed like it should be
unnecessary. Specifically, I had its output piped to a Bash while
read
loop and once that had found a line to act on, there was no
further need to get more lines from xprop
, but break
or
exit
didn't result in xprop
exiting.
The solution#
Use $BASHPID
to get the actual PID of the subshell,
ps
to climb the process tree to the appropriate parent
and pkill
to kill its children:
some_pipeline |
while read -r line
do
# Do whatever until ready to kill the pipe...
# ... then kill it:
ppid=$BASHPID
ppid=$(ps -o ppid:1= "$ppid")
pkill -9 -P "$ppid"
done
Rewrite appfinder-and-focus.sh
from last time:
#!/usr/bin/bash
xprop -spy -root _NET_CLIENT_LIST | stdbuf -oL head -2 |
while read -r l
do
winid="${l/#*, /}"
if [[ $(xdotool getwindowname "$winid") == \
"Application Finder" ]]
then
xdotool windowactivate "$winid"
ppid=$BASHPID
ppid=$(ps -o ppid:1= "$ppid")
pkill -9 -P "$ppid"
fi
done) 2>/dev/null &
xfce4-appfinder &