?? kthread1.c
字號:
/* * Written by Der Herr Hofrat, der.herr@hofr.at * (C) 2002 FSMLabs * License: GPL Version 2 */#define __KERNEL_SYSCALLS__#include <linux/config.h>#include <linux/module.h>#include <linux/sched.h>#include <linux/unistd.h>#include <linux/kmod.h>#include <linux/errno.h>#include <linux/unistd.h>#include <linux/smp_lock.h>#include <asm/uaccess.h>static int errno;static char cmd_path[256] = "/bin/echo";static int exec_cmd(void * kthread_arg){ struct task_struct *curtask = current; /* we set up a minimum environment but note that we still inherit * the environment of who ever launched insmod of this module ! * sounds dangorous ? - it is ! */ static char * envp[] = { "HOME=/root ", "TERM=linux ", "PATH=/bin", NULL }; char *argv[] = { cmd_path, kthread_arg, NULL }; int ret; /* Give the kthread all effective privileges...scarry... */ curtask->euid = curtask->fsuid = 0; curtask->egid = curtask->fsgid = 0; cap_set_full(curtask->cap_effective); /* Allow execve args to be in kernel space. */ set_fs(KERNEL_DS); printk("calling execve for %s \n",cmd_path); ret = execve(cmd_path, argv, envp); /* if we ever get here - execve failed */ printk(KERN_ERR "failed to exec %s, ret = %d\n", cmd_path,ret); return -1;}int init_module(void){ pid_t pid; char kthread_arg[]="Hello Kernel World !"; pid = kernel_thread(exec_cmd, (void*) kthread_arg, 0); if (pid < 0) { printk(KERN_ERR "fork failed, errno %d\n", -pid); return pid; } printk("fork ok, pid %d\n",pid); return 0;}void cleanup_module(void){ pid_t pid; char kthread_arg[]="Good by crul World :)"; pid = kernel_thread(exec_cmd, (void*) kthread_arg, 0); if (pid < 0) { printk(KERN_ERR "fork failed, errno %d\n", -pid); } printk("fork ok, pid %d\n",pid); printk("module exit\n");}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -