linux 使用set_task 杀死D状态进程

如何杀死D状态进程

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

#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); 
obj-m := killd.o 
all :
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

sudo insmod ./killd.ko pid=1234

————————————————
版权声明:本文为CSDN博主「vincentluo91」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/VincentLuo91/article/details/72625446

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cpu_set_t 是 Linux 中的一种数据类型,用于设置可用 CPU 的集合。它可以用来限制进程或线程在哪些 CPU 上运行,从而实现 CPU 亲和性(CPU affinity)的设置。 以下是使用 cpu_set_t 的基本步骤: 1. 在程序中包含头文件 sched.h,该文件包含了与 CPU 亲和性相关的函数和数据类型。 2. 定义一个 cpu_set_t 变量,用于存储可用 CPU 的集合。 3. 初始化 cpu_set_t 变量,可以通过调用 CPU_ZERO 宏将集合清零,然后再调用 CPU_SET 宏设置需要使用的 CPU。 4. 将 cpu_set_t 变量与进程或线程绑定,可以通过调用 sched_setaffinity 函数来实现。这个函数会将进程或线程绑定到指定的 CPU 集合上。 以下是一个简单的示例程序,演示如何使用 cpu_set_t 设置 CPU 亲和性: ``` #include <stdio.h> #include <stdlib.h> #include <sched.h> int main(int argc, char *argv[]) { cpu_set_t cpuset; int cpu; pid_t pid; if (argc < 3) { printf("Usage: %s <pid> <cpu>\n", argv[0]); return 1; } pid = atoi(argv[1]); cpu = atoi(argv[2]); CPU_ZERO(&cpuset); CPU_SET(cpu, &cpuset); if (sched_setaffinity(pid, sizeof(cpu_set_t), &cpuset) == -1) { perror("sched_setaffinity"); return 1; } printf("Process %d bound to CPU %d\n", pid, cpu); return 0; } ``` 这个程序可以将指定进程绑定到指定的 CPU 上。例如,执行以下命令可以将进程 1234 绑定到 CPU 1 上: ``` $ ./cpuset 1234 1 ``` 如果绑定成功,程序会输出以下信息: ``` Process 1234 bound to CPU 1 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值