X-Git-Url: https://iankelling.org/git/?p=distro-setup;a=blobdiff_plain;f=mount-latest-subvol;h=36895aa1612ad1d58bc923775d19887117fdf60f;hp=d7be613c763d122d0259b5a434ca4a161f599627;hb=f0a35267f28e274ef3c2f63ffc20a26ca864e37c;hpb=866a0cbd9127386520def96ff49bdc8424df8112 diff --git a/mount-latest-subvol b/mount-latest-subvol index d7be613..36895aa 100644 --- a/mount-latest-subvol +++ b/mount-latest-subvol @@ -82,23 +82,25 @@ fstab() { 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 } @@ -192,7 +194,9 @@ for vol in q a o i; do 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)