【问题标题】:System Call in a System Call系统调用中的系统调用
【发布时间】:2014-12-25 08:00:11
【问题描述】:

您好,我正在尝试向 lubuntu 内核添加自定义系统调用。我正在尝试终止此系统调用中的进程。我在原始 ubuntu 内核中尝试了 kill() 系统调用。但是我在这样做时遇到了编译器错误。我不知道如何正确地做到这一点。提前感谢您的回答。

#define _POSIX_SOURCE
#include <linux/syscalls.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/list.h>
#include <linux/signal.h>
#include <linux/types.h>

asmlinkage long sys_my_process_terminator (pid_t pid , int flag) 
{

       struct task_struct *task;
       struct list_head *list;
    struct list_head *siblist;

    // firstly check the flag 
    struct task_struct *myprocess;
        struct task_struct *sibchild;
    myprocess = find_task_by_vpid(pid);
    struct task_struct *pp;
    pp =myprocess->parent;
    if (flag == 0){

    // this loop under this comment will kill all the children of the given process

    list_for_each(list, &myprocess->children) {
        task = list_entry(list, struct task_struct, sibling);
    printk ("%s [%d] \n" , task->comm , task->pid);
    kill(task->pid,SIGKILL);
    }

    }

    else if (flag==1) {

    list_for_each(list, &pp->children) {
        task = list_entry(list, struct task_struct, sibling);

    list_for_each(siblist, &task->children) {
        sibchild = list_entry(siblist, struct task_struct, sibling);
    printk ("%s [%d] \n" , sibchild->comm , sibchild->pid);
    kill(sibchild->pid,SIGKILL);
    }
    if (task->pid !=pid){
    printk ("%s [%d] \n" , task->comm , task->pid);
    kill(task->pid,

}

【问题讨论】:

标签: linux operating-system kernel


【解决方案1】:

你不能在像 fork、kill、exit 这样的系统调用中使用系统调用。

kill() 系统调用通常用于发送到常规进程或多线程应用程序;其对应的服务程序是 sys_kill() 函数。

因此您可以在内核级别使用 sys_kill() 函数来终止进程。

sys_kill() 的用法: https://www.kernel.org/doc/htmldocs/device-drivers/API-sys-kill.html

和源书: Robert Love 的“Linux 内核开发,第 3 版”(出版商:Addison Wesley Professional,2010 年)

注意:2. Part'ı yapabildiniz mi ?? :)

【讨论】:

  • Saol cevap icin 2. kismi da yaptik =)
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2021-11-08
  • 2021-09-19
  • 2015-01-09
  • 2012-10-04
相关资源
最近更新 更多