Currently, the "foreach DE ps -m" command may display "DE" as well as "ZO" state tasks as below: crash> foreach DE ps -m ... [0 00:00:00.040] [ZO] PID: 11458 TASK: ffff91c75680d280 CPU: 7 COMMAND: "ora_w01o_p01mci" [0 00:00:00.044] [ZO] PID: 49118 TASK: ffff91c7bf3e8000 CPU: 19 COMMAND: "oracle_49118_p0" [0 00:00:00.050] [ZO] PID: 28748 TASK: ffff91a7cbde3180 CPU: 2 COMMAND: "ora_imr0_p01sci" [0 00:00:00.050] [DE] PID: 28405 TASK: ffff91a7c8eb0000 CPU: 27 COMMAND: "ora_vktm_p01sci" [0 00:00:00.051] [ZO] PID: 31716 TASK: ffff91a7f7192100 CPU: 6 COMMAND: "ora_p001_p01sci" ... That is not expected behavior, the "foreach" command needs to handle such cases. Let's add a check to determine if the task state identifier is specified and the task state identifier is equal to the "DE", so that it can filter out the non-"DE" state tasks. With the patch: crash> foreach DE ps -m [0 00:00:00.050] [DE] PID: 28405 TASK: ffff91a7c8eb0000 CPU: 27 COMMAND: "ora_vktm_p01sci" crash> Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx> --- task.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/task.c b/task.c index b9076da35565..4f40c396b195 100644 --- a/task.c +++ b/task.c @@ -7043,6 +7043,9 @@ foreach(struct foreach_data *fd) if (fd->state == _RUNNING_) { if (task_state(tc->task) != _RUNNING_) continue; + } else if (fd->state == _DEAD_) { + if (task_state(tc->task) != _DEAD_) + continue; } else if (fd->state & _UNINTERRUPTIBLE_) { if (!(task_state(tc->task) & _UNINTERRUPTIBLE_)) continue; -- 2.37.1 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility Contribution Guidelines: https://github.com/crash-utility/crash/wiki