D状态的就是 uninterruptible sleep ,此时进程不能被信号唤醒,GDB等调试工具也不能对它调试,因为GDB也是用到了信号,也杀不死它

D状态的形成

如何分析D状态

cat /proc/17944/status ; echo -e "\n"; cat /proc/17944/stack

方法一

重启reboot

方法二 修改内核,将其进程状态转化为别的状态,然后kill掉。

  1. 创建目录kill_D_process,进入目录继续

  2. touch killd.c,写入如下内容:

     #include <linux/init.h>
    #include <linux/kernel.h> /*Needed by all modules*/
    #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);
  3. touch Makefile 文件,写入:

     obj-m := killd.o
  4. 执行如下命令。生成一堆文件,其中有文件killd.ko。

     # 必须存在内核源码
    make -C /usr/src/kernels/2.6.32-754.23.1.el6.x86_64/ M=`pwd` modules
  5. 找到处于D状态的进程,比如pid=1234,执行如下命令,进程状态变成T(停止状态),然后使用kill -9 pid杀死

     sudo insmod ./killd.ko pid=1234

内核源码安装:

yum install kernel
yum install kernel-devel 或者 yum update更新下
其中kernel-devel将内核源代码安装到/usr/src/kernels/目录下 或者
uname -r查看内核版本;下载新内核源码:到官网www.kernel.org,下载最新版本linux内核,保存到/usr/src/kernels目录

来源:

https://blog.csdn.net/VincentLuo91/article/details/72625446

如何杀死处于进程状态D的进程的更多相关文章

  1. Windows中杀死占用某个端口的进程

    Windows中杀死占用某个端口的进程 netstat -ano | findstr //列出进程极其占用的端口,且包含 80 tasklist | findstr taskkill -PID < ...

  2. linux命令(10)使用kill杀死含有指定关键字的进程

    命令:ps -ef|grep keyword|grep -v grep|cut -c 9-15|xargs kill -9 批量杀死包含关键字“keyword”的进程. "ps -ef&qu ...

  3. Linux批量杀死包括某个keyword的进程

    ps -ef|grep ./amplxe-gui|grep -v grep|cut -c 9-15|xargs kill -9 批量杀死包括keyword"./amplxe-gui" ...

  4. 杀死Linux中的defunct进程(僵尸进程)的方法指南

    杀死Linux中的defunct进程(僵尸进程)的方法指南_LINUX_操作系统_脚本之家https://www.jb51.net/LINUXjishu/457748.html 这样能看到僵尸进程.

  5. Linux 一条命令杀死占用端口的所有进程

    Linux 一条命令杀死占用端口的所有进程 2018年05月28日 19:43:05 gq97 阅读数 7655更多 分类专栏: Linux   版权声明:本文为博主原创文章,遵循CC 4.0 BY- ...

  6. c# 杀死占用某个文件的进程

    原文:c# 杀死占用某个文件的进程 需要使用微软提供的工具Handle.exe string fileName = @"H:\abc.dll";//要检查被那个进程占用的文件 Pr ...

  7. Kill杀死Linux中的defunct进程(僵尸进程)

    一.什么是defunct进程(僵尸进程)? 在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状 ...

  8. Windows中杀死占用某个端口的进程(转)

    最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,终于有一天受不了了,想要想办法解决.刚开始从网上找了好多教程,发现不行.开始自己尝试,终于,成功的将占用端口的进程杀掉.在此记录下过程( ...

  9. 阿里云被挖矿使用,导致cpu长期处于100%,ddgs进程,xWx3T进程,关于redis密码

    1.使用top命令,查看到一个叫xWx3T的进程cpu占用99.8%,由于我的阿里云是单核的,所以最高只能100%. 把它用kill命令杀死后,过一会儿又启动了,又占用100%. 使用ps -ef可以 ...

随机推荐

  1. nginx证书配一波

    nginx下,拿到crt和key就可以开始干~ 同一个nginx,多个域名,没问题. server { listen 80; listen 443 ssl; server_name www.xxx.c ...

  2. VMware下安装的CentOS7.5,设置成静态IP后ping不通外网

    网上很多都说用下面的方法即可解决 在CentOS中 ping www.baidu.com 无法ping通,可能原因是DNS没配置好 方法一: 修改vim /etc/resolv.conf 增加如下内容 ...

  3. PowerDesigner 创建表的时候 没有自增长Id的设置项

    今天早上同事创建表的时候,在那个界面没有自增长Id的选项,当时我也纳闷,软件肯定都是一样的,设置的步骤都一样(有些配置好的 我就没改过 然后就忘了还改过些什么步骤了),结果还是没有那个选项 百度了一下 ...

  4. 打造VIM成为IDE - nerdtree

    nerdtree 自动缩进 :set paste :set nopaste set tabstop=4 set softtabstop=4 set shiftwidth=4 set noautoind ...

  5. Time of Trial

    Time of Trial(思维) 题目大意:一个人想逃,一个人要阻止那个人逃跑 ,阻止者念每一个符咒的时间为b[i],逃跑者念每一个符咒的时间为a[i],逃跑者如果念完了第i个符咒,阻止者还没有念完 ...

  6. Noip2019暑期训练1

    题目名称 时空定位 棋子移动 高精度乘法 数独游戏 存盘文件名 location piece mul sudoku 输入文件名 location.in piece.in mul.in sudoku.i ...

  7. 第12组 Alpha冲刺(4/6)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 由于这两天在修bug,燃尽图没有下降 展示Git当日代码/文档签入记录(组内共享) 注: 由于Git ...

  8. python 获取 一个正整数的二进制

    #coding=utf- def getbin(a): out = "" # 辗转相除法 ): div = a mod = a % out += str(mod) ): break ...

  9. Eclipse安装jbpm插件

    1.1   eclipse mar 和neon有什么区别? Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境. . ...

  10. Linux+Apache环境下安装SSL证书

    一.安装证书 (温馨提示:安装证书前请先备份您需要修改的服务器配置文件) 1.确认证书文件及证书路径.  例证书文件为:zzidc.com.jks,放置目录为Tomcat的conf目录下.  2.配置 ...