[LTP] [PATCH] process_state: Enhancement of process state detection

Li Wang liwang@redhat.com
Mon Feb 5 11:26:53 CET 2024


The functions will be more robust against process names with
unusual characters and will correctly read the state character
from the /proc/[pid]/stat file. This is a necessary change
because the process name, which is a free-form string, can
contain spaces and other characters that would otherwise
disrupt the simple parsing logic of the original format string.

e.g.
 $ cat /proc/792442/stat
 792442 (Web Content) S 164213 4351 4351 0 -1 4194560 ...

Reported-by: Ian Wienand <iwienand@redhat.com>
Signed-off-by: Li Wang <liwang@redhat.com>
Cc: Chunyu Hu <chuhu@redhat.com>
---
 lib/tst_process_state.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/tst_process_state.c b/lib/tst_process_state.c
index 08a9d0966..c15283c3d 100644
--- a/lib/tst_process_state.c
+++ b/lib/tst_process_state.c
@@ -22,7 +22,7 @@ int tst_process_state_wait(const char *file, const int lineno,
 
 	for (;;) {
 		safe_file_scanf(file, lineno, cleanup_fn, proc_path,
-				"%*i %*s %c", &cur_state);
+				"%*[^)]%*c %c", &cur_state);
 
 		if (state == cur_state)
 			break;
@@ -54,7 +54,7 @@ int tst_process_state_wait2(pid_t pid, const char state)
 			return 1;
 		}
 
-		if (fscanf(f, "%*i %*s %c", &cur_state) != 1) {
+		if (fscanf(f, "%*[^)]%*c %c", &cur_state) != 1) {
 			fclose(f);
 			fprintf(stderr, "Failed to read '%s': %s\n",
 				proc_path, strerror(errno));
-- 
2.40.1



More information about the ltp mailing list