X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/708b461947715669a071faac5350be0f11ec2312..ca385d45a3d565989aa7f6a6f4cf454b918435f4:/package/base-files/files/lib/upgrade/common.sh?ds=sidebyside diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index 65ce816db..e97958bf9 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -77,6 +77,38 @@ run_ramfs() { # [...] exec /bin/busybox ash -c "$*" } +kill_remaining() { # [ ] + local sig="${1:-TERM}" + echo -n "Sending $sig to remaining processes ... " + + local stat + for stat in /proc/[0-9]*/stat; do + local pid name state ppid rest + read pid name state ppid rest < $stat + name="${name#(}"; name="${name%)}" + + local cmdline + read cmdline < /proc/$pid/cmdline + + # Skip kernel threads + [ -n "$cmdline" ] || continue + + case "$name" in + # Skip essential services + *ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*ubusd*|*netifd*|*hostapd*|*wpa_supplicant*|*udhcpc*) : ;; + + # Killable process + *) + if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then + echo -n "$name " + kill -$sig $pid 2>/dev/null + fi + ;; + esac + done + echo "" +} + run_hooks() { local arg="$1"; shift for func in "$@"; do