|
|
@@ -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 ""
|
|
|
}
|