base-files: rewrite killing of nonessential services to not rely on top, use the...
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 16 Nov 2011 15:01:18 +0000 (15:01 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 16 Nov 2011 15:01:18 +0000 (15:01 +0000)
SVN-Revision: 29187

package/base-files/Makefile
package/base-files/files/lib/upgrade/common.sh

index 90c68cd1759b17d9a45c02f5561324cb05a6ca50..61043c295ab0cc8981279c7d24628c03bd60dab4 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=94
+PKG_RELEASE:=95
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
index 0870f7de5c8ec7d1137524aaea29d012fe1dcfe3..e97958bf9b7af3d45ead097d45dd7bcf50bd150c 100644 (file)
@@ -80,19 +80,27 @@ run_ramfs() { # <command> [...]
 kill_remaining() { # [ <signal> ]
        local sig="${1:-TERM}"
        echo -n "Sending $sig to remaining processes ... "
-       /bin/busybox top -bn1 2>/dev/null | while read pid ppid user stat vsz pvsz pcpu cmd args; do
-               case "$pid" in
-                       [0-9]*) : ;;
-                       *) continue ;;
-               esac
-               case "$cmd" in
-                       # Skip kernel threads and essential services
-                       \[*\]|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*ubusd*|*netifd*|*hostapd*|*wpa_supplicant*|*udhcpc*) : ;;
+
+       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 "${cmd##*/} "
+                                       echo -n "$name "
                                        kill -$sig $pid 2>/dev/null
                                fi
                        ;;