Author: blogic Date: 2014-07-10 21:16:27 +0200 (Thu, 10 Jul 2014) New Revision: 41563
Modified: trunk/package/base-files/files/lib/upgrade/common.sh Log: sysupgrade: Enable killing of all processes under upgraded 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?\195?\169 Valentin <[email protected]> Modified: trunk/package/base-files/files/lib/upgrade/common.sh =================================================================== --- trunk/package/base-files/files/lib/upgrade/common.sh 2014-07-10 19:16:23 UTC (rev 41562) +++ trunk/package/base-files/files/lib/upgrade/common.sh 2014-07-10 19:16:27 UTC (rev 41563) @@ -99,6 +99,13 @@ 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 @@ # 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*) : ;; + 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 + # Killable process + *) + if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then + echo -n "$name " + kill -$sig $pid 2>/dev/null + fi + ;; + esac + fi done echo "" } _______________________________________________ openwrt-commits mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits
