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. CefSharp 与 js 相互调用及注意事项

    CefSharp 与 js 相互调用 一. CefSharp调用 js CefSharp.WinForms.ChromiumWebBrowser wb; ... 方式1. ExecuteScriptA ...

  2. Incorrect integer value: '' for column 'id' at row 1 错误解决办法

    最近一个项目,在本地php环境里一切正常,ftp上传到虚拟空间后,当执行更新操作(我的目的是为了设置id为空)set id=‘’时提示: Incorrect integer value: '' for ...

  3. 在linux中使用Sqlplus命令登录MySQL,查看表并设置行数和宽度,使其正常显示

    在linux中使用sqlplus命令进入MySQL,设置行数和行宽   1) 查看目前的pagesize,默认是14: 1.      show pagesize;    2.      set pa ...

  4. GoLand——配置goproxy.io代理

    前言 由于众所周知的原因,也为了更好的下载go的包,所以找到了goproxy 配置 ctrl+alt+s->Go->Go Modules(vgo)->设置proxy为https:// ...

  5. modbus系列文章—汇总

    请移步我博客园的网站 基本上是自己的原创,不是网上抄来抄去的,有很多干货,希望一边整理,一边修改-有不对的地方多多指教. https://www.cnblogs.com/CodeWorkerLiMin ...

  6. python中的assert

    assert 2>3, ("错误")print("haha") 如果断言处的表达式是错误的话,会打印assert后面的提示,并且下面的语句就不会执行了. ...

  7. CDN工作机制

    CDN(content delivery network),即内容分布网络,是一种构建在现有Internet上的一种先进的流量分配网络.CDN以缓存网站中的静态数据为主,当用户请求动态内容时,先从CD ...

  8. 【JZOJ6206】【20190610】二分图边染色

    题目 ​ 对一个二分图的边染色,满足有相同端点的边的颜色一定不同; ​ 设最优染色为\(C\) ,你的染色为\(X\),只需要满足$ X \le 2^ {\lceil log  C \rceil }$ ...

  9. 选择排序python实现

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.注意每次查找 ...

  10. MintUI引入vue项目以及引入iconfont图标

    官网地址:http://mint-ui.github.io/#!/zh-cn 中文文档:http://mint-ui.github.io/docs/#/zh-cn2 示例展示:http://eleme ...