[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