Articles of procfs

在/ proc / modules中加载模块的状态

从这个问题的答案可以看出, /proc/modules的第五个字段是/proc/modules的加载状态,可以是Live或者Loading或者Unloading 。 但是在我的Ubuntu 14.04系统和其他系统中,我只能find这个字段的值Live 。 这个领域是否也有其他的价值呢?

我如何从proc文件获得系统时间?

我如何从proc文件获得系统时间? 我知道我们可以从date等一些命令中获得系统时间,也可以基于时间API编写一些代码。 但我真的需要使用一个简单的proc文件来获得时间。 不pipe什么时间格式,一个简单的值是可以的。 例如,1970/1/1的秒数真的足够好。

parsingproc / pid / cmdline来获取函数参数

我试图通过使用cmdline中的数据来提取应用程序所调用的参数。 如果我启动一个像这样的应用程序实例: myapp 1 2 然后cat myapp的cmdline我会看到像myapp12的东西。 我需要提取这些值,我使用这段代码来做到这一点 pid_t proc_id = getpid(); sprintf(buf,"/proc/%i/cmdline",proc_id); FILE * pFile; pFile = fopen (buf,"r"); if (pFile!=NULL) { fread(buf,100,100,pFile); cout << "PID " << proc_id << endl; string str = buf; cout << buf << endl; size_t found=str.find_last_of("/\\"); cout << " file: " << str.substr(found+1) << endl; fclose (pFile); } […]

setenv / clearenv + procfs environ

如果进程修改了环境,是否可以从/proc/pid/environ文件中获取相关信息? 我的testing显示setenv/putenv/clearenv不更新environ文件。 但是,在bash可以调用未unset ENV并查看procfs中的更改。

如何在内核和用户空间之间使用mmap&proc共享内存

我正在开发一个Linux内核模块。我想使用mmap和proc文件系统在内核和用户空间之间共享内存。 我已经实现了一些部分,但我不知道如何完成它。 我想在内核模块中写一些东西( sk_buff ),并在用户空间中读取它们(读取proc文件并保存文件)。 我该怎么办? 我不知道file_operations的含义; 我应该实施fops.write还是别的什么? 这里是我的代码演示,(Linux 3.16模块): #include <linux/version.h> #include <linux/module.h> #include <linux/proc_fs.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/seq_file.h> #define PROC_MEMSHARE_DIR "memshare" #define PROC_MEMSHARE_INFO "phymem_info" #define PROC_MMAP_FILE "mmap" /* alloc one page. 4096 bytes */ #define PAGE_ORDER 0 /* this value can get from PAGE_ORDER */ #define PAGES_NUMBER 1 struct proc_dir_entry *proc_memshare_dir […]

如何在更新的Linux内核中find堆栈内存段

我有一个小型库,它写出一个“瘦核心”,其中只包含堆栈信息(和一个有效的核心必要的其他位),但不包括任何堆。 这并不总是有用的,但是核心比完整的核心要小得多,有时候人们不想提供堆的内容。 这个库通过读取/proc/<PID>/maps并定位[stack]和[stack:<tid>]段(这个过程有很multithreading)。 例如,我会看到这样的输出: … 7fe848000000-7fe848021000 rw-p 00000000 00:00 0 7fe848021000-7fe84c000000 —p 00000000 00:00 0 7fe84c1ff000-7fe84c200000 —p 00000000 00:00 0 7fe84c200000-7fe84ca00000 rw-p 00000000 00:00 0 [stack:25672] 7fe84ca00000-7fe84cc00000 rw-p 00000000 00:00 0 7fe84cdff000-7fe84ce00000 —p 00000000 00:00 0 7fe84ce00000-7fe84d600000 rw-p 00000000 00:00 0 [stack:25534] 7fe84d600000-7fe84d800000 rw-p 00000000 00:00 0 7fe84d9ff000-7fe84da00000 —p 00000000 00:00 0 7fe84da00000-7fe84e200000 rw-p 00000000 […]

我太快了,算不算什么?

我在不同的数据库系统上做了一些本地实验。 我在执行查询之前和之后收集(总结)来自/proc/status CPU信息。 在查询运行时,差异会告诉我jiffies或USER_HZ的数量。 但是当(根据clock_gettime() )查询的运行时间在0.001 seconds以下时,差值为零。 这是为了快速利用CPU信息还是我错过了别的东西?

linux:通过procfs确定文件句柄的身份

我试图确定是否有可能使用来自procfs的元数据来区分同一个文件上的两个单独的句柄,以及具有两个指向它的文件描述符的单个句柄。 案例1:两个文件句柄 # setup exec 3>test.lck exec 4>test.lck # usage flock -x 3 # this grabs an exclusive lock flock -s 4 # this blocks echo "This code is never reached" 案例2:一个手柄,两个FD # setup exec 3>test.lck exec 4>&3 # usage flock -x 3 # this grabs an exclusive lock flock -s 4 # this converts […]

破坏的符号链接和一个神秘的(删除)

我一直在做Linux的proc文件系统的东西,我遇到了一些行为,我想澄清。 /proc中的每个进程都有可执行文件/proc/{pid}/exe的符号链接。 如果一个进程在可执行文件被删除之后继续运行,读取这个符号链接将返回可执行文件的path,并在最后附加(deleted) 。 运行这个命令你甚至可以在你的系统上看到一些: grep '(deleted)' <(for dir in $(ls /proc | grep -E '^[0-9]+'); do echo "$dir $(readlink /proc/$dir/exe)"; done) 我试着用一些简单的bash命令重新创build这个行为: >>> echo "temporary file" >> tmpfile.test >>> ln -s tmpfile.test tmpfile.link >>> rm tmpfile.test >>> readlink tmpfile.link tmpfile.test 没有(deleted)附加到名称! 尝试一个cat tmpfile.link确认链接已损坏( cat: tmpfile.link: No such file or directory )。 然而,有一天,这个相同的testing的结果是一个(deleted)被添加到readlink的输出。 是什么赋予了? 这是我想知道的: […]

在Linux / proc / sys / *伪文件上寻找(0)?

有没有文件标准的Linux /proc/sys文件描述符的语义? 对他们使用seek(0)是否合适? 这里有一段代码似乎对我的testing很好: #!/usr/bin/python from time import sleep with open('/proc/sys/fs/file-nr','r') as f: while True: d = f.readline() print d.split()[0] f.seek(0) sleep(1) 这似乎工作。 然而,我想知道如果这是做这种事情的正确方法,或者如果我应该循环open() … read() … close() 在这个特殊情况下,我将使用这个与collectd Python插件…所以这个特定的代码将无限期运行在一个守护进程。 不过,我对一般问题的答案感兴趣。 (顺便说一下,有一个“打开文件/ inodes”模块/插件collectd )?