done
}
kill-dir() {
- found_pids=false
- sig=${1:-TERM}
- if pids=$(timeout 4 lsof -t $dir); then
- found_pids=true
- timeout 4 lsof -w $dir
- kill -$sig $pids
- fi
- # fuser will find open sockets that lsof won't, for example from gpg-agent.
- # note: -v shows kernel processes, which then doesn't return true when we want
- if timeout 4 fuser -m $dir &>/dev/null; then
- found_pids=true
- fuser -$sig -mvk $dir
- fi
- if $found_pids; then
+ for sig; do
+ echo kill-dir $sig
+ found_pids=false
+ if pids=$(timeout 4 lsof -t $dir); then
+ found_pids=true
+ timeout 4 lsof -w $dir
+ kill -$sig $pids
+ fi
+ # fuser will find open sockets that lsof won't, for example from gpg-agent.
+ # note: -v shows kernel processes, which then doesn't return true when we want
+ if timeout 4 fuser -m $dir &>/dev/null; then
+ found_pids=true
+ fuser -$sig -mvk $dir
+ fi
sleep .5
- return 0
- fi
+ if ! $found_pids; then
+ return 0
+ fi
+ done
return 1
}
if e umount -R $dir; then
unmounted+=($dir)
else
- kill-dir || kill-dir INT || kill-dir HUP || ! $force || kill-dir KILL ||:
+ if ! kill-dir TERM TERM TERM INT INT HUP HUP; then
+ if $force; then kill-dir KILL; fi
+ fi
if e umount -R $dir; then
unmounted+=($dir)