问题标签 [procfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3047 浏览

linux - 从父进程读取子进程的 /proc/pid/mem 文件

在下面的程序中,我试图导致以下情况发生:

  1. 进程A为堆栈变量a赋值。
  2. 进程A(父)使用 PID child_pid创建进程B (子) 。
  3. 进程B调用函数func1,传递一个指向 a 的指针
  4. 进程B通过指针改变变量a的值。
  5. 进程B打开它的/proc/self/mem文件,寻找包含a的页面,并打印a的新值。
  6. 进程A(同时)打开/proc/ child_pid /mem,寻找正确的页面,并打印a的新值。

问题是,在第 6 步中,父级只能在/proc/ child_pid /mem中看到a的值,而子级确实可以在其/proc/self/mem中看到新值。为什么会这样?有什么方法可以让父母通过/proc文件系统查看孩子对其地址空间的更改?

该程序产生以下输出。请注意,a(粗体)的值在父母和孩子对/proc/ child_pid /mem文件的读取中是不同的。

在 main:arg.a 的地址:0x7ffffe1964f0
Stack_start:7ffffe196000
arg_ptr->a 的地址:0x7ffffe1964f0
PARENT(pid 20376,child pid 20377)
PARENT:child_offset:4f0
CHILD(pid 20377,parent pid 20376)。
func1:旧值:42
func1:地址:0x7ffffe1964f0
func1:新值:53
PARENT:来自孩子的消息:1
CHILD:child_mem_fd:4
PARENT:child_path:/proc/20377/mem
CHILD:新值53
PARENT:child_mem_fd:7
PARENT :新值42
结束子进程。

0 投票
3 回答
2941 浏览

c++ - Linux c++:api 与 /proc 文件?

我正在开发一个应用程序来收集和发送各种系统信息(分区空间/空闲、笔记本电脑电池信息等)。我以直接 c++ api 的形式获取这些信息并没有取得多大成功。尽管它都可以通过 /proc (或类似)中的文件获得。

所以 - 我想知道在我的 c++ 应用程序中读取/解析这些文件是否是获取此信息的适当方式,还是我应该继续尝试发现 API?(注意:我正在使用 statvfs )。

到目前为止,在 Win32 中收集此类信息似乎更容易。似乎很奇怪。

0 投票
1 回答
1631 浏览

linux - 第二次从 Proc-FS 文件读取时使用 lseek() 是否安全

  1. 使用lseek(fd,0)然后read(fd,buf)for/proc/stat文件而不是重新打开它以获取该文件的更新内容是否安全?
  2. 打开这个文件后的mmap()调用究竟做了什么(见下文)?

我遇到的问题是 top 报告的 CPU 使用率太低(软件中断为 10% vs 100%)。strace 表示 top 不会重新打开此文件,而是会重新开始并再次读取它。不知何故,下次从这个文件中读取的内容与我/proc/stat单独运行 cat for file 时得到的内容不匹配。

此外,如果我同时在循环中运行 top 和 cat /proc/stat,则 top 开始报告正确的 CPU-Usage。

我发现的另一个区别是 top在打开文件mmap()后立即使用 call ,而不会这样做。我不确定这是否也与我的问题有关(因为在这里):/proc/statcatfilesdes=-1

我正在使用带有 2.6.32-27-server 映像的 Ubuntu 10.04.1 桌面版。CPU是英特尔Q6600。

0 投票
3 回答
12817 浏览

linux - 了解 /proc/sys/vm/lowmem_reserve_ratio

通过阅读 Documentation/sysctl/vm.txt 中的解释,我无法理解变量“lowmem_reserve_ratio”的含义。我也试过用谷歌搜索它,但找到的所有解释都与 vm.txt 中的完全相似。

如果某人解释它或提及一些关于它的链接,这将非常有帮助。这是原始解释:-

0 投票
4 回答
4185 浏览

c++ - 如何使用 C/C++ 语言查找 Linux/UNIX 中进程的所有读写内存地址?

通过 /proc 文件系统,可以使用 /proc/PID_PROCESS/maps 读取内存映射,但是在 C/C++ 中是否有专门用于此功能的本机 API?

即找出对于 PID 9322 的进程可写和可读的内存地址:

这些地址被传递到我的程序中,但现在我想将此函数直接集成到我的 C++ 程序中。

为了最有效,如果我想支持其他 *BSD 系统,我将无法利用 /proc 系统,我认为应该有一些方法可以直接生成 /proc/1/maps 而不在那里再次读取它们,如果我错了,请纠正^_^

0 投票
3 回答
1420 浏览

linux - 从内核代码的其他部分访问 /proc fs 变量

我正在尝试让一个用户级程序通过 /proc 与内核进行通信。

我按照tldp上的说明,成功地创建了一个自定义 proc 文件,使用insmod动态加载它并从用户空间读取(cat)和写入(echo)到 proc 文件。

现在我的问题是如何从内核的另一部分访问 /proc 变量(它是一个字节缓冲区),比如系统调用基础设施?由于自定义 proc 文件是动态加载和链接的,如何从静态编译的内核代码中引用它?

系统规格:在 MacBook Pro 13" (2009) 上运行 VMWare Fusion 的 Ubuntu 10.10。

编辑:相关代码(根据要求) -

过程文件.c

get_procvariable.c(在内核的另一部分)

如果您需要更多详细信息,请在评论中告诉我。提前致谢。

0 投票
4 回答
7484 浏览

c - 通过 /proc/mounts 监控挂载点的变化

fd_set根据 proc 手册,可以通过打开“/proc/mounts”并在select()调用中添加要读取的文件描述符来监视 linux 系统中的挂载点更改。

以下代码适用于 Ubuntu 9.04,而不适用于 Ubuntu 10.04(带有 2.6.32 linux 内核):

可编译的片段。

文件描述符在一台机器上始终是可读的,因此它会在 select 调用中不断弹出。即使坐骑没有变化。

我在这里错过了什么吗?

提前感谢您的帮助!

人 5 过程:

/proc/[pid]/mounts(自 Linux 2.4.19 起)

这是当前挂载在进程挂载命名空间中的所有文件系统的列表。该文件的格式记录在 fstab(5) 中。从内核版本 2.6.15 开始,该文件是可轮询的:打开文件进行读取后,该文件的更改(即文件系统挂载或卸载)导致 select(2) 将文件描述符标记为可读,并且 poll( 2) 和 epoll_wait(2) 将文件标记为有错误条件。

0 投票
1 回答
4882 浏览

linux - 找出一个进程在 Linux 中休眠了多长时间?

基本上我想要所有已经休眠超过一个小时的进程。

我知道ps中有etime,但遗憾的是它显示了整个生命周期。

这在linux下怎么做(最好用ps)?

0 投票
2 回答
4070 浏览

linux - Linux下共享库加载地址

我对共享库有很大的疑问。我研究的是,将由不同进程共享的库的虚拟地址对于所有这些进程都是相同的。但是我尝试通过以下命令集使用 proc 文件系统来查看相同的内容:

输出是:

不同进程的相同共享库的虚拟地址不同。

有人可以解释一下为什么会这样吗?

0 投票
1 回答
5424 浏览

c - /proc/pid/mem 上的 mmap

有没有人成功地用 Linux 内核 2.6 映射 /proc/pid/mem 文件?我收到 ENODEV(没有此类设备)错误。我的电话看起来像这样:

我通过在调试时查看 /proc/pid/maps 文件来验证,当执行到达此调用时,偏移量的值是堆栈顶部减去 PAGE_SIZE 的值。我还用 ptrace 验证了 mmap 将 errno 设置为 ENODEV。