【问题标题】:How can I call my own system call in a exit() system call如何在 exit() 系统调用中调用我自己的系统调用
【发布时间】:2014-11-02 01:10:35
【问题描述】:

我编写了新的系统调用,可以终止给定进程的所有子进程,并且我想在用户调用“exit()”系统调用时使用这个系统调用。

其实“exit”系统调用也会被修改。如果执行“exit”系统调用的进程的“priority”值大于30,那么“exit”系统调用也将使用我自己的新系统调用。

为此,我更改了 /kernel/exit.c 中的“do_exit”函数,但它不起作用。

void do_exit(long code){
    struct task_struct *tsk = current;
    int group_dead;

    if(tsk->prio > 30){
        my_own_sys_call(tsk->pid);
    }
...
}

我应该在“do_exit”中调用我自己的系统调用吗?如果是,我不知道在函数的哪个部分调用

顺便说一句,我不确定“prio”是否可以获得进程的优先级,因为有很多元素,例如“prio”,“static_prio”,“normal_prio”,“rt_priority”关于优先级“任务结构”。

【问题讨论】:

  • 为什么要在内核领域编写代码?您可以在用户空间中使用进程组!而且您应该避免更改_exit(2) 系统调用!如果需要,请添加另一个,但不要更改到处使用的_exit
  • “没用”。请继续。
  • 我必须更改_exit syscall

标签: linux operating-system kernel linux-kernel


【解决方案1】:

使用atexit。 示例:

#include<stdio.h>
#include<stdlib.h>

void exit_func(void)
{
    printf("Inside %s\n",__func__);
}

int main()
{
    atexit(exit_func);
    printf("Inside %s\n",__func__);
}

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 2018-04-04
    • 2014-12-25
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2021-08-04
    • 2021-11-08
    相关资源
    最近更新 更多