diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index 99cb9dbc..b78272a3 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -118,6 +118,7 @@ str_replace() { killall_proc_mountpoint() { local _pid local _t + local _killed=0 for _pid in /proc/*; do _pid=${_pid##/proc/} case $_pid in @@ -125,8 +126,12 @@ killall_proc_mountpoint() { esac [ -e "/proc/$_pid/exe" ] || continue [ -e "/proc/$_pid/root" ] || continue - strstr "$(ls -l -- "/proc/$_pid" "/proc/$_pid/fd" 2>/dev/null)" "$1" && kill -9 "$_pid" + if strstr "$(ls -l -- "/proc/$_pid" "/proc/$_pid/fd" 2>/dev/null)" "$1" ; then + kill -9 "$_pid" + _killed=1 + fi done + return $_killed } getcmdline() { diff --git a/modules.d/99shutdown/module-setup.sh b/modules.d/99shutdown/module-setup.sh index 5cb3594a..dfd6caa2 100755 --- a/modules.d/99shutdown/module-setup.sh +++ b/modules.d/99shutdown/module-setup.sh @@ -14,7 +14,7 @@ depends() { # called by dracut install() { local _d - inst_multiple umount poweroff reboot halt losetup stat + inst_multiple umount poweroff reboot halt losetup stat sleep inst_multiple -o kexec inst "$moddir/shutdown.sh" "$prefix/shutdown" [ -e "${initdir}/lib" ] || mkdir -m 0755 -p ${initdir}/lib diff --git a/modules.d/99shutdown/shutdown.sh b/modules.d/99shutdown/shutdown.sh index 918a8a4f..f21cc811 100755 --- a/modules.d/99shutdown/shutdown.sh +++ b/modules.d/99shutdown/shutdown.sh @@ -38,7 +38,7 @@ source_hook pre-shutdown warn "Killing all remaining processes" -killall_proc_mountpoint /oldroot +killall_proc_mountpoint /oldroot || sleep 0.2 umount_a() { local _did_umount="n"