内核态怎么杀死一个知道名字的进程?

huofen2005 2011-11-21 08:37:39
我这边已经实现了遍历所有进程,找出我需要的进程:


int process_cnt=0;
struct task_struct *task = &init_task; // 全局进程列表
struct task_struct *p;
struct list_head *pos;

read_lock(&tasklist_lock);
list_for_each(pos,&task->tasks)
{
p = list_entry(pos, struct task_struct, tasks);
process_cnt ++;
os_printf("%d--->%s\n", p->pid,p->comm);
}

read_unlock(&tasklist_lock);
os_printf("the number of process is:%d \n", process_cnt);


现在需要把指定名字的一些进程杀掉。
1. 尝试了kill,这个接口是用户态加载了glibc才能用的,因此不行!
2. 尝试了sys_kill,结果加载的时候出现sxgt_xct: Unknown symbol sys_kill!

linux内核版本: linux-2.6.30

-----
请教下各位,其他还有什么办法能够达到我的目的?

...全文
443 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujwcool1 2013-04-02
  • 打赏
  • 举报
回复
尝试用send_sig函数失败
xinyu391 2011-11-22
  • 打赏
  • 举报
回复
发信号
huofen2005 2011-11-22
  • 打赏
  • 举报
回复
谢谢各位关注:

int
send_sig(int sig, struct task_struct *p, int priv),这个函数向某个进程发送信号,当p为-1时向所有进程发送。
int
send_sig_info(int sig, struct siginfo *info, struct task_struct *p)与上个函数类似,只是多加了附加信息


向线程组发送信号:
int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)

更详细的信息请参考《深入理解Linux内核v3》431页。
mamamiya 2011-11-22
  • 打赏
  • 举报
回复
给进程发信号
念茜 2011-11-21
  • 打赏
  • 举报
回复
force_sig(SIGKILL, int pid);这个也可以,pid就是进程号
liutengfeigo 2011-11-21
  • 打赏
  • 举报
回复
我觉得还是得第二条那里做文章.
liutengfeigo 2011-11-21
  • 打赏
  • 举报
回复
反正得kill

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧