Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C insmod返回被杀死可能是因为任务结构_C_Linux_Linux Kernel - Fatal编程技术网

C insmod返回被杀死可能是因为任务结构

C insmod返回被杀死可能是因为任务结构,c,linux,linux-kernel,C,Linux,Linux Kernel,我访问当前进程的结构是为了在内核空间的Linux模块中获取当前进程的进程ID和命令名,但是当我使用make构建模块并将其插入内核时,insmod返回Killed,然后我甚至无法从内核中删除我的模块 这里有什么问题吗? 如您所见,我还尝试将task\u struct用作全局,但得到了相同的结果 #include <linux/module.h> #include <linux/init.h> #include <linux/sched.h> // #includ

我访问当前进程的结构是为了在内核空间的Linux模块中获取当前进程的进程ID和命令名,但是当我使用
make
构建模块并将其插入内核时,
insmod
返回
Killed
,然后我甚至无法从内核中删除我的模块

这里有什么问题吗?

如您所见,我还尝试将
task\u struct
用作全局,但得到了相同的结果

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

MODULE_LICENSE("GPL");
MODULE_AUTHOR("whoami");
MODULE_DESCRIPTION("Simple LKM");

// char *to_say = "Nothing";
// struct task_struct *current_process;
// module_param(to_say, charp, S_IRUGO);

static int __init initialization_function(void)
{
    struct task_struct *current_process;
    printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);
    return 0;
}

static void __exit cleanup_funcion(void)
{
    printk(KERN_INFO "Module: Bye, World.");
}

module_init(initialization_function);
module_exit(cleanup_funcion);
我修复了错误,我只是用
current
初始化了
current\u进程

struct task_struct *current_process = current;
printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);

尝试在启用警告的情况下生成。在init例程中,使用符号
当前_进程
,但未初始化;您想改为使用当前的<代码>吗?在
insmod
之后,还要检查/var/log中的信息/messages@Milag我在某处听说,使用
current
会破坏我的模块,但找不到源代码。而
/var/log/syslog
是新发行版中
/var/log/messages
的替代品。@Milag I修复了它(:当您可以直接使用
current
时,为什么要声明附加变量(
current\u process
):
printk(KERN\u INFO”模块:pid-%d,命令名-%s\n',current->pid,current->comm)
?“我在某处听说使用current会破坏我的模块”-你可能是指你告诉过不要定义名为
current
的变量。但是使用现有的
current
类变量宏并没有错。@Tsyvarev谢谢,这很有效。我不知道我们能做到这一点
struct task_struct *current_process = current;
printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);