如何在系统调用中终止进程?

时间:2016-11-09 15:12:00

标签: linux system-calls

我发现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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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

您需要将结构指针传递给进程,信号编号​​和布尔1Look在其他代码中要求如何执行此操作。