summaryrefslogtreecommitdiff
path: root/package/base-files/files/lib
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2011-11-16 15:01:18 +0000
committerJo-Philipp Wich <jow@openwrt.org>2011-11-16 15:01:18 +0000
commit6d80ce78f1a7961dbe7ad63cbc79e36cdae4edf7 (patch)
tree5ed39ba3087ed83f99749456b1df6bd2c9f753ea /package/base-files/files/lib
parentcabbc9966c6b415f4bcff326f72ff029f9ddae22 (diff)
downloadmtk-20170518-6d80ce78f1a7961dbe7ad63cbc79e36cdae4edf7.zip
mtk-20170518-6d80ce78f1a7961dbe7ad63cbc79e36cdae4edf7.tar.gz
mtk-20170518-6d80ce78f1a7961dbe7ad63cbc79e36cdae4edf7.tar.bz2
base-files: rewrite killing of nonessential services to not rely on top, use the proc filesystem only
SVN-Revision: 29187
Diffstat (limited to 'package/base-files/files/lib')
-rw-r--r--package/base-files/files/lib/upgrade/common.sh26
1 files changed, 17 insertions, 9 deletions
diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
index 0870f7d..e97958b 100644
--- a/package/base-files/files/lib/upgrade/common.sh
+++ b/package/base-files/files/lib/upgrade/common.sh
@@ -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
;;