diff options
author | Daniel Golle <daniel@makrotopia.org> | 2021-11-13 16:29:52 +0000 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2021-11-13 18:36:52 +0000 |
commit | 4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5 (patch) | |
tree | 1fe423eb53463e1e8eb42f0bf8bae7a4ad1ba8ff | |
parent | f81dc44fd5360ce58a205ac7ce42aa4611b41483 (diff) | |
download | upstream-4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5.tar.gz upstream-4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5.tar.bz2 upstream-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-x | package/base-files/files/lib/upgrade/stage2 | 7 |
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 |