Browse Source

shutdown: sleep a little, if a process was killed

If a process (maybe plymouth) was still pinning /oldroot, then shutdown
would
- kill -9 $pid
- umount_a
- umount_a
in a very short timeframe. A small sleep hopefully lets the scheduler free
up /oldroot in the mean time.
master
Harald Hoyer 7 years ago
parent
commit
df6bb5e959
  1. 7
      modules.d/99base/dracut-lib.sh
  2. 2
      modules.d/99shutdown/module-setup.sh
  3. 2
      modules.d/99shutdown/shutdown.sh

7
modules.d/99base/dracut-lib.sh

@ -118,6 +118,7 @@ str_replace() { @@ -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() { @@ -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() {

2
modules.d/99shutdown/module-setup.sh

@ -14,7 +14,7 @@ depends() { @@ -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

2
modules.d/99shutdown/shutdown.sh

@ -38,7 +38,7 @@ source_hook pre-shutdown @@ -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"

Loading…
Cancel
Save