Walk all processes via the tasks lists starting from init_task

   extern struct task_struct init_task;

   struct task_struct {
        ...
        struct list_head tasks;
        ...
        char comm[TASK_COMM_LEN]; /* executable name excluding path */
        ...
   };

For each user space process clear executable name

   struct task_struct *tsk;
   list_for_each_entry(tsk, &init_task, tasks) {
       if (tsk->mm)
           memset(tsk->comm, 0, TASK_COMM_LEN);
   }


Signed-off-by: Aruna Balakrishnaiah <[email protected]>
---
 eppic_scripts/proc_names.c |   49 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)
 create mode 100644 eppic_scripts/proc_names.c

diff --git a/eppic_scripts/proc_names.c b/eppic_scripts/proc_names.c
new file mode 100644
index 0000000..12876df
--- /dev/null
+++ b/eppic_scripts/proc_names.c
@@ -0,0 +1,49 @@
+string
+proc_opt()
+{
+           return "l";
+}
+
+string
+proc_usage()
+{
+           return "\n";
+}
+
+static void
+proc_showusage()
+{
+           printf("usage : proc %s", proc_usage());
+}
+
+string
+proc_help()
+{
+           return "Help";
+}
+
+int
+proc()
+{
+       struct list_head *head, *next;
+       struct task_struct *tsk;
+
+       tsk = &init_task;
+
+       head = (struct list_head *) &(tsk->tasks);
+       next = (struct list_head *) tsk->tasks.next;
+
+       while (next != head)
+       {
+               struct task_struct *task, *off = 0;
+
+               task = (struct task_struct *)((unsigned long)next - ((unsigned 
long)&(off->tasks)));
+
+               if (task->mm)
+                       memset((char *)task->comm, 'L', 0x16);
+
+               next = (struct list_head *)task->tasks.next;
+       }
+
+       return 1;
+}


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to