日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何杀掉D状态的进程?[zt]【转】

發(fā)布時(shí)間:2025/3/18 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何杀掉D状态的进程?[zt]【转】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://blog.csdn.net/chinalinuxzend/article/details/4288791

[-]

  • 如何殺掉D狀態(tài)的進(jìn)程zt
  • 相關(guān)博文
  • 原貼:http://www.xclinux.cn/?p=752

    如何殺掉D狀態(tài)的進(jìn)程?[zt]

    ?????? 狀態(tài)為 D (Uninterruptible sleep) ,以及狀態(tài)為 Z (Zombie)這些垃圾進(jìn)程要么是求而不得,像怨婦一般等待資源(D),要么是僵而不死,像冤魂一樣等待超度(Z),它們?cè)?CPU run_queue 里滯留不去,把 Load Average 弄的老高老高,沒看過我前一篇blog的國際友人還以為這兒民怨沸騰又出了什么大事呢。怎么辦?開槍!kill -9!看你們走是不走。但這兩種垃圾進(jìn)程偏偏是刀槍不入的,不管換哪種槍法都?xì)⒉坏羲鼈儭o奈,只好reboot,像剿滅禽流感那樣不分青紅皂白地一律撲殺!?
    ?????? 基本想法就是修改內(nèi)核,遍歷進(jìn)程列表,找到處于D狀態(tài)的進(jìn)程,將其狀態(tài)轉(zhuǎn)換為別的狀態(tài)就可以kill掉了。?
    這是一種比較粗魯?shù)姆椒?#xff0c;可能會(huì)引起一些不良后果,暫時(shí)沒有考慮。對(duì)于確切知道已經(jīng)沒有什么用處,不用做清理工作的,處于D狀態(tài)怎么也殺不死的進(jìn)程來說,確是很有效。?
    內(nèi)核模塊代碼:?
    —————-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?
    插入模塊的時(shí)候提供D狀態(tài)的進(jìn)程號(hào),就可以將其轉(zhuǎn)換為stopped狀態(tài),使用普通kill就可以殺死。?
    ./insmod ./killd.ko pid=1234

    總結(jié)

    以上是生活随笔為你收集整理的如何杀掉D状态的进程?[zt]【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。