[OpenWrt-Devel] [PATCH] sysupgrade: Enable killing of all processes under upgraded
André Valentin
avalentin at marcant.net
Wed Jul 9 05:22:18 EDT 2014
If the sysupgrade scripts is called under upgraded, it will not kill all
other processes as it should to avoid interference by locked filesystem.
This patch checks the parent and if it is upgraded, it kills all.
Signed-off-by: André Valentin <avalentin at marcant.net>
---
package/base-files/files/lib/upgrade/common.sh | 39 ++++++++++++++++--------
1 file changed, 27 insertions(+), 12 deletions(-)
diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
index 6f1880f..ba9de99 100644
--- a/package/base-files/files/lib/upgrade/common.sh
+++ b/package/base-files/files/lib/upgrade/common.sh
@@ -99,6 +99,13 @@ kill_remaining() { # [ <signal> ]
local sig="${1:-TERM}"
echo -n "Sending $sig to remaining processes ... "
+ local my_pid=$$
+ local my_ppid=$(cut -d' ' -f4 /proc/$my_pid/stat)
+ local my_ppisupgraded=
+ grep -q upgraded /proc/$my_ppid/cmdline >/dev/null && {
+ local my_ppisupgraded=1
+ }
+
local stat
for stat in /proc/[0-9]*/stat; do
[ -f "$stat" ] || continue
@@ -113,18 +120,26 @@ kill_remaining() { # [ <signal> ]
# Skip kernel threads
[ -n "$cmdline" ] || continue
- case "$name" in
- # Skip essential services
- *procd*|*upgraded*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*) : ;;
-
- # Killable process
- *)
- if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then
- echo -n "$name "
- kill -$sig $pid 2>/dev/null
- fi
- ;;
- esac
+ if [ $$ -eq 1 ] || [ $my_ppid -eq 1 ] && [ -n "$my_ppisupgraded" ]; then
+ # Running as init process, kill everything except me
+ if [ $pid -ne $$ ] && [ $pid -ne $my_ppid ]; then
+ echo -n "$name "
+ kill -$sig $pid 2>/dev/null
+ fi
+ else
+ case "$name" in
+ # Skip essential services
+ *procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*) : ;;
+
+ # Killable process
+ *)
+ if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then
+ echo -n "$name "
+ kill -$sig $pid 2>/dev/null
+ fi
+ ;;
+ esac
+ fi
done
echo ""
}
--
1.7.10.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list