|
楼主 |
发表于 2005-7-21 17:37:51
|
显示全部楼层
Post by daemeon
在workqueue中创建(因为它把SIGCHLD的处理方式设为SIG_IGN了),创建时,在kernel_thread的最后一个参数上加SIGCHLD.
要自杀,直接返回就是了。要他杀,可以设置一个变量,在内核进程被唤醒时检查,然后返回。
具体可以参考workqueue的destroy方式.下面是个简单的例子.
static struct work_struct work;
static int noop(void *dummy)
{
printk("Exiting\n");
return 0;
}
static void create_thread(void *dummy)
{
kernel_thread(noop, NULL, CLONE_KERNEL | SIGCHLD);
}
static int test_init(void)
{
INIT_WORK(&work, create_thread, NULL);
schedule_work(&work);
}
static void test_exit(void) {}
module_init(test_init);
module_exit(test_exit);
我的内核是2.4.18,里面好像没有struct work_struct结构和INIT_WORK宏 :ask |
|