Articles of procfs

embedded式linux:首先偏移在/ proc / pid / maps错误?

下面我的工作细节,只是部分与我的问题有关: 在内核版本为2.6.37.6的embedded式linux(arm)上的/ proc / pid / maps中,第一行(可执行文件的代码段)的偏移量似乎是错误的。 我总是看到一行: 00008000-00061000 r-xp 00000000 00:10 8073509 myprog (范围是进程地址空间中的地址,权限之后的数字应该是文件的偏移量) 然而,实际的抵消似乎是0x8000 – 至less,使用这个假设的解释看起来更可信。 nm显示myprog在0x8000之前没有代码,所以这也是有道理的。 有人能给我一个指向我可以find更多关于这个? 我找不到任何东西。 我在做什么:我写了一个工具来解释由mtrace()生成的日志,find可能的内存泄漏,并追溯到分配数据的代码。 对于后面的步骤,我从日志中获取一个指令指针,从/ proc / pid / maps的运行时间映射中查找它,find所需的可执行文件或库,并使用它们的nm-map来查找实际的函数做分配。 这对于除了可执行文件本身以外的所有东西都很有用。

从<linux / proc_fs.h>中缺lessUbuntu proc_root_driver

我正在尝试在Ubuntu 10.04中编译内核2.6.35-22的内核模块,并且抱怨proc_root_driver丢失。 我做了一些search,我发现这应该定义这个,但在我的版本的Linux头,它没有定义。 是否有另一个全局variables,我应该使用它的位置,还是有一种方法,我可以在某个地方定义它的内核模块可以编译?

如何与用户空间共享Linux内核内存(只读)

我需要分享大约100KiB的内核内存给用户空间。 用户空间守护进程将以几秒(5-10次)的只读方式访问这个内存。 procfs是实现它的最好方法吗?

是否有可能确定一个进程已经打开读取与通过procfs写入哪些fds?

procfs会告诉我一个进程在任何给定的时间使用哪个fds。 但是有没有办法确定哪些阅读与写作是开放的? 在下面的输出中,显然进程所有者(用户'x')具有读取/写入链接/文件的权限,但这与知道pid 4166是否正在写入或读取特定fd是不一样的。 $ ls -l / proc / 4166 / fd / 总计0 lrwx —— 1 xx 64 Mar 12 21:15 0 – > / dev / pts / 3 lrwx —— 1 xx 64 Mar 12 21:15 1 – > / dev / pts / 3 lrwx —— 1 xx 64 Mar […]

如何不写入虚拟文件

我创build了一个虚拟文件驱动程序,从文件中获取input。 这个input被保存在内部(除了发生的其他事情之外),并被写入读取文件。 现在,当我写一个空string或数据块到这个文件,似乎写处理程序不被调用。 乍一看没有意义,但第二个是确实。 看着 echo -n "" > somefile 这将清除文件的内容。 我需要相同的虚拟文件,因为我想告诉司机“嘿,现在没有更多的数据给你”。 我有机会让写处理程序调用一个空的信息吗? 发送特定的转义序列不是一个选项,因为数据是二进制的,我不能提名一个值作为“空”。

如何在Linux中只使用fs和bash来从IPv4地址获取接口名称?

如何使用像/ proc,/ dev,/ sys和bash这样的文件系统从IPv4 IP地址获取接口名称? 这可能不使用命令(如ip,ifconfig等)? 我也无法使用任何软件包或安装任何工具。 编辑:原因是我试图从一个Docker容器中获取主机的接口名称和IP地址。 容器以主机的根目录进行安装,可以访问主机的文件系统。 但是,由于容器位于单独的命名空间中,因此ip命令(以及其他类似命令,如ifconfig)将仅返回容器的networking。 因此,我相信获取主机的接口名称和IP地址的唯一方法是通过主机的根(/ hostroot / proc,/ hostroot / sys等)。 请注意,当启动容器(告诉容器使用主机的networking名称空间)时,我不能拥有–net = host标志。 我尝试从/ proc / net / fib_trie文件中find所有的networking接口IP地址(IPv4)。 我阅读在https://regexit.com/3-ways-to-get-your-ip-on-a-linux-system/基本上说,我可以做cat / proc / net / fib_trie | grep -B 1“32本地主机”查找IP地址。 我也在https://stackoverflow.com/a/42082822中看到,我们可以通过匹配string“32 host”的模式来过滤fib_trie以获取本地networking接口地址。 从上述方法(使用/ proc / net / fib_trie)获取IP地址后,我尝试将这些IP地址与/ proc / net / route中的“目标”IP地址进行匹配以获取networking接口名称。 但是,我的/ proc / net / […]

什么使pthread失效?

我正在使用当前创build后台线程(PTHREAD_DETACHED)的multithreading程序(使用pthreads),然后调用pthread_exit(0)。 我的问题是,这个过程被列为“已经停止”,好奇地似乎并没有真正存在于/ proc(这打败了我的debugging策略) 我想要满足以下要求: 程序应该在循环中运行函数A并且运行一次函数B. 给定程序的PID / proc / $ pid / exe,/ proc / $ pid / maps和/ proc / $ pid / fd必须是可访问的(当进程停止时,它们全是空的或无效的链接) 必须像平常一样用CTRL + C和CTRL + Z暂停/中断程序 编辑:我犹豫不决改变程序的接口为“主”线程中的A和B产生的线程(他们目前在另一种方式)。 它会解决问题吗?

了解/ proc / sys / vm / lowmem_reserve_ratio

通过阅读Documentation / sysctl / vm.txt中的解释,我无法理解variables“lowmem_reserve_ratio”的含义。 我也试图谷歌它,但所有的解释发现是完全相同的目前在vm.txt。 如果sb解释它或者提到一些关于它的链接,这将是非常有帮助的。 原来的解释是: The lowmem_reserve_ratio is an array. You can see them by reading this file. – % cat /proc/sys/vm/lowmem_reserve_ratio 256 256 32 – Note: # of this elements is one fewer than number of zones. Because the highest zone's value is not necessary for following calculation. But, these values […]

在内核中创build一个简单的只写进程条目

#include <linux/module.h> #include <linux/kernel.h> #include <linux/proc_fs.h> #include<linux/sched.h> #include <asm/uaccess.h> #include <linux/slab.h> char *msg; ssize_t write_proc(struct file *filp,const char *buf,size_t count,loff_t *offp) { copy_from_user(msg,buf,count); printk(KERN_INFO "%s",msg); return count; } struct file_operations proc_fops = { write: write_proc }; int proc_init (void) { proc_create("write",0,NULL,&proc_fops); return 0; } void proc_cleanup(void) { remove_proc_entry("write",NULL); } MODULE_LICENSE("GPL"); module_init(proc_init); module_exit(proc_cleanup); 当我使用命令echo 'hello' > […]

从父进程读取subprocess的/ proc / pid / mem文件

在下面的程序中,我试图导致以下情况发生: 过程A为堆栈variablesa分配一个值。 进程A (父进程)使用PID child_pid创build进程B (subprocess)。 进程B调用函数func1 ,将指针传递给一个 。 过程B通过指针更改variablesa的值。 进程B打开它的/ proc / self / mem文件,寻找包含a的页面,并打印a的新值。 进程A (同时)打开/ proc / child_pid / mem ,寻find正确的页面,并打印一个新的值。 问题在于,在步骤6中,父级只能看到in / proc / child_pid / mem的旧值,而孩子确实可以在/ proc / self / mem中看到新值。 这是为什么? 有没有办法让父母通过/ proc文件系统来查看孩子对其地址空间的更改? #include <fcntl.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> […]