Re: [PATCH] cleanup ptrace stops and remove notify_parent

From: Albert Cahalan
Date: Tue Aug 31 2004 - 11:03:32 EST


Roland McGrath writes:

> diff -rBzpu linux-2.6.9/fs/proc/array.c linux-2.6-ptracefix/fs/proc/array.c
> --- linux-2.6.9/fs/proc/array.c 2004-08-30 20:10:50.000000000 -0700
> +++ linux-2.6-ptracefix/fs/proc/array.c 2004-08-30 18:43:29.000000000 -0700
> @@ -130,8 +130,9 @@ static const char *task_state_array[] =
> "S (sleeping)", /* 1 */
> "D (disk sleep)", /* 2 */
> "T (stopped)", /* 4 */
> - "Z (zombie)", /* 8 */
> - "X (dead)" /* 16 */
> + "T (tracing stop)", /* 8 */
> + "Z (zombie)", /* 16 */
> + "X (dead)" /* 32 */
> };

For TASK_DEAD and TASK_TRACED, might you be hiding some
underlying state? I want to display stuff like:

T stopped (not traced)
TX stopped, and being traced
RX running or runnable, and being traced
ZE zombie, and trying to exit
RXE running, trying to exit, and traced

It's troubling the way TASK_DEAD and TASK_TRACED show up as
actual states and hide any other stuff. I'd much prefer them
to be flags of some sort.

> diff -rBzpu linux-2.6.9/kernel/power/process.c linux-2.6-ptracefix/kernel/power/process.c
> --- linux-2.6.9/kernel/power/process.c 2004-08-30 20:10:51.000000000 -0700
> +++ linux-2.6-ptracefix/kernel/power/process.c 2004-08-30 18:20:05.000000000 -0700
> @@ -25,7 +25,8 @@ static inline int freezeable(struct task
> (p->flags & PF_NOFREEZE) ||
> (p->state == TASK_ZOMBIE) ||
> (p->state == TASK_DEAD) ||
> - (p->state == TASK_STOPPED))
> + (p->state == TASK_STOPPED) ||
> + (p->state == TASK_TRACED))

(p->state & (TASK_ZOMBIE|TASK_DEAD|TASK_STOPPED|TASK_TRACED))

> @@ -70,6 +71,7 @@ int freeze_processes(void)
> if (!freezeable(p))
> continue;
> if ((p->flags & PF_FROZEN) ||
> + (p->state == TASK_TRACED) ||
> (p->state == TASK_STOPPED))
> continue;

(p->state & (TASK_TRACED|TASK_STOPPED))

> @@ -3670,7 +3670,7 @@ static void show_task(task_t * p)
> task_t *relative;
> unsigned state;
> unsigned long free = 0;
> - static const char *stat_nam[] = { "R", "S", "D", "T", "Z", "W" };
> + static const char *stat_nam[] = { "R", "S", "D", "T", "t", "Z", "X" };

The 't' doesn't match what you do elsewhere. Try "TX" for that.
I think "ZX" would be right for an exiting process.



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/