• 如何杀死处于进程状态D的进程


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

    D状态的形成

    如何分析D状态

    cat /proc/17944/status ; echo -e "
    "; 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

  • 相关阅读:
    JPG bufffer转Mat
    cv:Mat MFC上显示 BitMatToWnd
    opencv 版本修改
    2个多边形的关系判断和相交面积计算
    截取图像 opencv
    SQL Server 存储过程的分页方案比拼
    XP系统下数据库文件夹的权限设置
    关于23种设计模式的有趣见解
    一些编程的好习惯
    sql server 2000的数据库还原
  • 原文地址:https://www.cnblogs.com/shengulong/p/11674004.html
Copyright © 2020-2023  润新知