From 4d3303b1bddf3c66fc0a05fb5eb45ceac48cd0d5 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Sat, 13 Nov 2021 16:29:52 +0000 Subject: [PATCH] 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 --- package/base-files/files/lib/upgrade/stage2 | 7 +++++-- 1 file 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() { # [ [ ] ] [ -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