summaryrefslogtreecommitdiff
path: root/pid2/pid.c
diff options
context:
space:
mode:
Diffstat (limited to 'pid2/pid.c')
-rw-r--r--pid2/pid.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/pid2/pid.c b/pid2/pid.c
new file mode 100644
index 0000000..6362f82
--- /dev/null
+++ b/pid2/pid.c
@@ -0,0 +1,50 @@
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/kdev_t.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+
+static char devname[] = "pidevice";
+static char modname[] = "pid.ko";
+static dev_t mydev;
+static struct task_struct *mytask;
+static struct task_struct *parent;
+
+static void show_processes(void)
+{
+ mytask = current;
+ parent = mytask->parent;
+
+ while (mytask->pid != parent->pid) {
+ printk(KERN_ALERT "current: %s (%d) - parent: %s (%d)\n",
+ mytask->comm, mytask->pid, parent->comm, parent->pid);
+ mytask = mytask->parent;
+ parent = mytask->parent;
+ }
+}
+
+static int __init init(void)
+{
+ int err;
+
+ printk(KERN_ALERT "%s loaded by %s (%d)\n",
+ modname, mytask->comm, mytask->pid);
+
+ if ((err = alloc_chrdev_region(&mydev, 0, 1, devname)))
+ printk(KERN_ALERT "ERROR in alloc_chrdev_region: %d\n", err);
+
+ return 0;
+}
+
+static void __exit exit(void)
+{
+ unregister_chrdev_region(mydev, 1);
+ printk(KERN_ALERT "%s unloaded\n", modname);
+}
+
+module_init(init);
+module_exit(exit);
+
+MODULE_LICENSE("GPL");