base-files: stage2: improve /proc/*/stat parser
[openwrt/openwrt.git] / package / base-files / files / lib / upgrade / stage2
index 45fb98d88969890d277b16dda94568b0189e5ac8..74edd61104888fde4d86f42725ef481979d28f74 100755 (executable)
@@ -97,12 +97,15 @@ kill_remaining() { # [ <signal> [ <loop> ] ]
                        [ -f "$stat" ] || continue
 
                        local pid name state ppid rest
-                       read pid name state ppid rest < $stat
-                       name="${name#(}"; name="${name%)}"
+                       read pid rest < $stat
+                       name="${rest#\(}" ; rest="${name##*\) }" ; name="${name%\)*}"
+                       set -- $rest ; state="$1" ; ppid="$2"
 
                        # Skip PID1, our parent, ourself and our children
                        [ $pid -ne 1 -a $pid -ne $proc_ppid -a $pid -ne $$ -a $ppid -ne $$ ] || continue
 
+                       [ -f "/proc/$pid/cmdline" ] || continue
+
                        local cmdline
                        read cmdline < /proc/$pid/cmdline