Well, yes, this looks very nice and is perfectly readable and#define TASK_RUNNING 0
+#define TASK_STATE_0 "R"
+#define TASK_STATE_NAME_0 "running"
+
#define TASK_INTERRUPTIBLE 1
+#define TASK_STATE_1 "S"
+#define TASK_STATE_NAME_1 "sleeping"
+
#define TASK_UNINTERRUPTIBLE 2
+#define TASK_STATE_2 "D"
+#define TASK_STATE_NAME_2 "disk sleep"
+
#define __TASK_STOPPED 4
+#define TASK_STATE_4 "T"
+#define TASK_STATE_NAME_4 "stopped"
+
#define __TASK_TRACED 8
+#define TASK_STATE_8 "t"
+#define TASK_STATE_NAME_8 "tracing stop"
+
/* in tsk->exit_state */
#define EXIT_ZOMBIE 16
+#define TASK_STATE_16 "Z"
+#define TASK_STATE_NAME_16 "zombie"
+
#define EXIT_DEAD 32
+#define TASK_STATE_32 "X"
+#define TASK_STATE_NAME_32 "dead"
+
/* in tsk->state again */
#define TASK_DEAD 64
+#define TASK_STATE_64 "x"
+#define TASK_STATE_NAME_64 "dead"
+
#define TASK_WAKEKILL 128
+#define TASK_STATE_128 "K"
+#define TASK_STATE_NAME_128 "wakekill"
+
#define TASK_WAKING 256
+#define TASK_STATE_256 "W"
+#define TASK_STATE_NAME_256 "waking"
Since we all love vile macro magic, is the below any better?
include/linux/task_states.h
TASK_STATE(RUNNING, "R", "running")
TASK_STATE(INTERRUPTIBLE, "S", "sleeping")
...
enum {I find this section less convincing (although certainly
#define TASK_STATE(tstate, tstate_c, tstate_s) __TASK_##tstate,
#include<linux/task_states.h>
#undef TASK_STATE
};
enum {
#define TASK_STATE(tstate, tstate_c, tstate_s) \
TASK_##tstate = 1<< __TASK_##tstate,
#include<linux/task_states.h>
#undef TASK_STATE
};
const char *task_state_to_char =
#define TASK_STATE(tstate, tstate_c, tstate_s) tstate_c
#include<linux/task_states.h>
#undef TASK_STATE
;
const char *task_state_to_string[] = {
#define TASK_STATE(tstate, tstate_c, tstate_s) tstate_s,
#include<linux/task_states.h>
#undef TASK_STATE
};