Re: SIGKILL and a sleeping kernel module

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/19/2013 02:07 PM, Kevin Wilson wrote:
> Hi all,
> I am trying to send a SIGKILL to a kernel module which is sleeping.
> I added a printk after the sleep command.
> Sending a SIGLKILL (by kill -9 SIGLKILL pidOfKernelThread) does **not**
> yield the message from printk("calling do_exit\n");
>  which is immediately after the msleep() command, as I expected.
> 
> Moreover, ps before and after the kill show 'D' in the STAT column
> (STATUS), which means that the process is sleeping (If I am not
> wrong).
> 
> Any ideas why ?

There are 2 ways in which a task can sleep - interruptible sleep and
uninterruptible sleep. Interruptible sleep means, the task can get
interrupted by a signal. A task doing uninterruptible sleep doesn't
get woken up by any signal. The 'D' state indicates that the task is
doing uninterruptible sleep, that's why your signals aren't working.

Regards,
Srivatsa S. Bhat

> below is the code:
> 
> #include<linux/init.h>
> #include<linux/module.h>
> #include<linux/kernel.h>
> #include<linux/kthread.h>
> #include<linux/sched.h>
> #include <linux/delay.h>
> 
> struct task_struct *task;
> 
> int thread_function(void *data)
> {
>     int exit_sig = SIGKILL;
> 
>     allow_signal(SIGKILL);
> 
>     printk("in %s\n",__func__);
>     // sleep for a second
>     msleep(60000);
>     printk("calling do_exit\n");
>     do_exit(exit_sig);
> 
>     return 0;
> }
> 
> static int kernel_init(void)
>     {
>     task = kthread_create(thread_function,NULL,"MY_KERNEL_THREAD");
>     return 0;
> }
> 
> static void kernel_exit(void)
>     {
>     printk("in kernel_exit\n");
>     kthread_stop(task);
>     }
> 
> 
> module_init(kernel_init);
> module_exit(kernel_exit);
> 
> MODULE_AUTHOR("Tester");
> MODULE_DESCRIPTION("test");
> MODULE_LICENSE("GPL");
> 
> rgs,
> Kevin
> 


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux