SIGKILL and a sleeping kernel module
Anatol Pomozov
anatol.pomozov at gmail.com
Tue Feb 19 14:54:41 EST 2013
Hi
On Tue, Feb 19, 2013 at 1:16 AM, Srivatsa S. Bhat
<srivatsa.bhat at linux.vnet.ibm.com> wrote:
> 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.
There is one more sleeping state: killable sleep. It is like
uninterruptable sleep that can be interrupted only with SIGKILL.
http://lwn.net/Articles/288056/
>
> 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 at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
More information about the Kernelnewbies
mailing list