diff options
Diffstat (limited to 'pid2/pid.c')
-rw-r--r-- | pid2/pid.c | 50 |
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"); |