如何在系统调用中杀死进程?

How to kill a process in a system call?

我发现 sys_kill 可用于从系统调用中终止进程,但是当我编译以下代码时,出现以下错误:

error: implicit declaration of function ‘sys_kill’ [-Werror=implicit-function-declaration]
  long kill = sys_kill(pid,SIGKILL);
#define _POSIX_SOURCE

#include <linux/kernel.h>
#include <linux/unistd.h>

#include <linux/module.h>
#include <linux/init.h>

#include <linux/sched.h>
#include <linux/cred.h>

asmlinkage long sys_killa(pid_t pid)
{

    printk(KERN_INFO "Current UID = %u\n",get_current_user()->uid);

    printk(KERN_WARNING "The process to be killed is %d \n", pid);

    long kill = sys_kill(pid,SIGKILL);

    printk(KERN_WARNING "sys kill returned %ld\n", kill);

    return 0;
}

通常无法从内核调用系统调用的入口点,因为 API 供用户 space 使用。有时,功能是在接近实现代码的代码中提供的。它通常通过 EXPORT_SYMBOL() 宏在整个内核中可用。

对于 kill() 系统调用,有内部内核函数 kill_pid,声明

int kill_pid(struct pid *pid, int sig, int priv)

您需要将结构指针传递给进程、信号编号和布尔值 1Look 在其他代码中进行此调用以了解如何执行此操作。