用kernel_thread创建的内核进程,在内核中调用什么函数可以杀死这个进程

来源:互联网 发布:如何快速上传淘宝宝贝 编辑:程序博客网 时间:2024/04/29 08:32

创建kernel thread时调用allow_signal指定它响应什么信号;
别处的内核代码可以: 用 kill_proc发送信号给它

  1. /*
  2. * file mythread.c
  3. */
  4. #include <linux/kernel.h>
  5. #include <linux/module.h>
  6. #include <linux/init.h>
  7. #include <linux/param.h>
  8. #include <linux/jiffies.h>
  9. #include <asm/system.h>
  10. #include <asm/processor.h>
  11. #include <asm/signal.h>
  12. /*
  13.         struct student {
  14.                 int age;
  15.                 char name[128];
  16.                 int score;
  17.         };
  18. */
  19. static pid_t thread_id;
  20. struct completion exit_completion;
  21. int my_fuction(void *arg)
  22. {
  23.         daemonize("demo-thread");
  24.         allow_signal(SIGKILL);
  25.         while(!signal_pending(current))
  26.         {
  27.                 printk("jiffies is %lu/n", jiffies);
  28.                 set_current_state(TASK_INTERRUPTIBLE);
  29.                 schedule_timeout(10 * HZ);
  30.         }
  31.         complete_and_exit(&exit_completion, 1);
  32.         return 0;
  33. }
  34. static int __init init(void)
  35. {
  36.         thread_id = kernel_thread(my_fuction, NULL, CLONE_FS | CLONE_FILES);
  37.         return 0;
  38. }
  39. static void __exit fini(void)
  40. {
  41.         kill_proc(thread_id, SIGKILL, 1);
  42.         wait_for_completion(&exit_completion);
  43.         printk("Goodbye/n");
  44. }
  45. module_init(init);
  46. module_exit(fini);
  47. MODULE_LICENSE("GPL");