+ -
当前位置:首页 → 问答吧 → 有一个进程用kill -9杀不掉,查看状态是D(disk sleep)

有一个进程用kill -9杀不掉,查看状态是D(disk sleep)

时间:2010-07-09

来源:互联网

系统是linux2.6.9

作者: yecheng_110   发布时间: 2010-07-09

reboot

作者: rain_fish   发布时间: 2010-07-09



QUOTE:
reboot
rain_fish 发表于 2010-07-09 15:49



可不是我自己的机器

作者: yecheng_110   发布时间: 2010-07-09

如何杀掉D状态的进程?
基本想法就是修改内核,遍历进程列表,找到处于D状态的进程,将其状态转换为别的状态就可以kill 掉了。
这是一种比较粗鲁的方法,可能会引起一些不良后果,暂时没有考虑。对于确切知道已经没有什么用处,不用做清理工作的,处于D状态怎么也杀不死的进程来说,确是很有效。

内核模块代码:
----------------killd.c----------------
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h> //for_each_process

MODULE_LICENSE("BSD");

static int pid = -1;
module_param(pid, int, S_IRUGO);

static int killd_init(void)
{
    struct task_struct * p;
    printk(KERN_ALERT "killd: force D status process to death\n");
    printk(KERN_ALERT "killd: pid=%d\n", pid);

    //read_lock(&tasklist_lock);
    for_each_process(p){
        if(p->pid == pid){
            printk("killd: found\n");
            set_task_state(p, TASK_STOPPED);
            printk(KERN_ALERT "killd: aha, dead already\n");
            return 0;
        }
    }
    printk("not found");
    //read_unlock(&tasklist_lock);
    return 0;
}

static void killd_exit(void)
{
    printk(KERN_ALERT "killd: bye\n");
}


module_init(killd_init);
module_exit(killd_exit);

-----Makefile------------
obj-m := killd.o

编译模块
make -C yourkerneltree M=`pwd` modules

插入模块的时候提供D状态的进程号,就可以将其转换为stopped状态,使用普通kill就可以杀死。
./insmod ./killd.ko pid=1234

作者: rain_fish   发布时间: 2010-07-09

貌似比reboot更危险,楼主试试?

作者: 没本   发布时间: 2010-07-09



QUOTE:
貌似比reboot更危险,楼主试试?
没本 发表于 2010-07-09 16:08




    ,网上找的。。本兄,有什么办法?

作者: rain_fish   发布时间: 2010-07-09

回复 rain_fish


    要我就不管它。。。。。。

作者: 没本   发布时间: 2010-07-09

呵呵,好办法

作者: rain_fish   发布时间: 2010-07-09

我连reboot的权限都没有
你还让我改内核

作者: yecheng_110   发布时间: 2010-07-09

还是程序的事

检查一下程序的各个环节

作者: liangzhishao   发布时间: 2010-07-09

IO严重导致的吧,如果不能重启机器,就只能等他自己恢复了,不过可以通过一些手段把内核堆栈打出来,来定位问题

作者: cugb_cat   发布时间: 2010-07-09

貌似只能等了。

作者: LunarBull   发布时间: 2010-07-09



QUOTE:
还是程序的事

检查一下程序的各个环节
liangzhishao 发表于 2010-07-09 17:22



不是我的程序

作者: yecheng_110   发布时间: 2010-07-10