summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2021-11-13 16:29:52 +0000
committerDaniel Golle <daniel@makrotopia.org>2021-11-13 18:36:52 +0000
commit4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5 (patch)
tree1fe423eb53463e1e8eb42f0bf8bae7a4ad1ba8ff
parentf81dc44fd5360ce58a205ac7ce42aa4611b41483 (diff)
downloadopenwrt-4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5.tar.gz
openwrt-4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5.tar.bz2
openwrt-4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5.zip
base-files: stage2: improve /proc/*/stat parser
Simply reading /proc/*/stat as a space-separated string will not work as the process name may itself contain spaces. Hence we must match on the '(' and ')' characters around the process name and can then handle the remaining string as space-separated values. This fixes shell error messages which have been popping up the console due to spaces in process names being interpreted as field separators. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rwxr-xr-xpackage/base-files/files/lib/upgrade/stage27
1 files changed, 5 insertions, 2 deletions
diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2
index 45fb98d889..74edd61104 100755
--- a/package/base-files/files/lib/upgrade/stage2
+++ b/package/base-files/files/lib/upgrade/stage2
@@ -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