如何杀掉D状态的进程?[zt]
答案:2 悬赏:30 手机版
解决时间 2021-03-14 22:44
- 提问者网友:几叶到寒
- 2021-03-14 12:56
如何杀掉D状态的进程?[zt]
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-03-14 14:25
怎么办?开枪!kill -9!看你们走是不走。但这两种垃圾进程偏偏是刀枪不入的,不管换哪种枪法都杀不掉它们。无奈,只好reboot,像剿灭禽流感那样不分青红皂白地一律扑杀!
基本想法就是修改内核,遍历进程列表,找到处于D状态的进程,将其状态转换为别的状态就可以kill掉了。
内核模块代码:
—————-killd.c—————-
#include
#include
#include //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状态的进程,将其状态转换为别的状态就可以kill掉了。
内核模块代码:
—————-killd.c—————-
#include
#include
#include //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
插入模
全部回答
- 1楼网友:独行浪子会拥风
- 2021-03-14 16:04
可以私聊我~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯