如何获得每个硬盘设备的总磁盘读/写字节数?
例如,如果我有 sda、sdb 和 sdc,是否有任何/proc我可以使用类似于/proc/net/dev网络的文件?
当我 cat /proc/1/smaps 文件时,我发现库通常有多达 4 个不同大小和不同 Rss/Pss 等的映射:
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 1636 kB
Rss: 980 kB
Pss: 9 kB
Shared_Clean: 980 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 980 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd ex mr mw me
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 2044 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB …Run Code Online (Sandbox Code Playgroud) 这个参数是什么意思呢?
# cat /proc/vmstat | grep low
kswapd_low_wmark_hit_quickly 2
Run Code Online (Sandbox Code Playgroud) 我不确定是否正确表达了这个问题,我已经尝试阅读man proc,但我无法找到正确的答案,也找不到验证它的简单方法。
我尝试获取一个 PID 的 CPU/RAM 消耗,但我不知道该程序将投射多少个子进程,我想获得 CPU 和 RAM 消耗的总量,而不仅仅是主进程。
我知道/proc/[PID]/io通过所有子进程确实累积的事实和经验,但我想知道并在可能的情况下提供证据是否同样适用于/proc/[PID]/stat.
Running this
strace -ff -tt perl -e 'open(A,"<","/proc/cpuinfo");'
Run Code Online (Sandbox Code Playgroud)
gives this:
22:36:10.365187 openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 3
22:36:10.382061 ioctl(3, TCGETS, 0x7fffb127ea50) = -1 ENOTTY (Inappropriate ioctl for device)
Run Code Online (Sandbox Code Playgroud)
/proc/cpuinfo is an in-memory file that does not require access to a slow disk. Why is it taking 17 ms to open?
I have tested 10 times on an idle system and the timing is very consistent.
$ uname -a
Linux hk 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 …Run Code Online (Sandbox Code Playgroud) 我尝试过网络搜索,但没有通过即时搜索 Linux 重定向输出找到答案。据我了解,输出说 stdout 工作通过使用文件描述符 1:
$ ls -l /proc/pid/fd/1
lrwx------ 1 user1 user1 64 Sep 27 13:37 1 -> /dev/pts/1
Run Code Online (Sandbox Code Playgroud)
有一些与proc文件系统一起工作的 Unix 命令,例如ls在这里,tee可以写入文件,cat可以读取。为什么对于例如 Linux 没有实现用户可以通过ln -sin手动更改这些链接bash?(当我尝试时出现错误"No such file or directory")。实施起来会不会很困难?那个实用程序proc的程序员是如何决定应该使用什么实用程序的?
zsh如果$PWD当前在已tmpfs安装的文件系统上,我想更改我的提示颜色。
比如说,/dev/shm是一个tmpfs文件系统。我可以确认:
$ grep /dev/shm /proc/mounts
tmpfs /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=26307700k 0 0
Run Code Online (Sandbox Code Playgroud)
所以,当我在的时候/dev/shm,我可以这样做:
grep -q "^tmpfs $PWD tmpfs " /proc/mounts
Run Code Online (Sandbox Code Playgroud)
但是,如果我站在/dev/shm/foo、 或 等中/dev/shm/foo/bar,那将行不通。
如何检查是否$PWD在tmpfs文件系统上?
可执行文件名为 linux 可以通过多种方式读取。
还有其他方式,比如读取/proc/[pid]/stat,或/proc/[pid]/status,但它们与1类似。
在第 1 点的情况下,proc(5)手册页说:
括号中的可执行文件的文件名。长度超过 TASK_COMM_LEN (16) 个字符(包括终止空字节)的字符串将被静默截断。无论可执行文件是否被换出,这都是可见的。
我有 3 个进程发现不匹配并突出显示它们(现在在我的系统上):
考虑这些情况:
/proc/7610/comm是Web Content/proc/7610/cmdline是
/opt/firefox-developer-edition/firefox-bin-contentproc-childID17-isForBrowser-prefsLen7837-prefMapSize238232-parentBuildID20201215185920-appdir/opt/firefox-developer-edition/browser4080truetab/proc/38193/comm是zyxwvutsrqponml/proc/38193/cmdline是/ramdisk/abcdefghijklmnopqrstuvwxyz./zyxwvutsrqponmlkjihgfedcba有一\u0000间ramdisk/abcdefghijklmnopqrstuvwxyz和./zyxwvutsrqponmlkjihgfedcba我能看到编程,我将其替换\s。
/proc/37030/comm是kworker/3:1-xfs-reclaim/sda2/proc/37030/cmdline为空。今天我发现/proc文件夹有些奇怪。有一个 PID (7825),我无法通过 将其视为正在运行的进程ps,我在制作时也看不到进程 ID,ls /proc但我可以看到它,ls /proc/7825也可以 cd 进入它。这里的输出:
# ls /proc
...
dr-xr-xr-x 9 xxxxxxx xxxxxxx 0 May 16 20:57 7812
dr-xr-xr-x 9 xxxxxxx xxxxxxx 0 May 16 20:52 7820
dr-xr-xr-x 9 root root 0 May 16 20:52 7836
dr-xr-xr-x 9 root root 0 May 16 20:52 786
dr-xr-xr-x 9 xxxxxxx xxxxxxx 0 May 16 20:57 7923
dr-xr-xr-x 9 xxxxxxx xxxxxxx 0 May 16 20:52 7924
...
Run Code Online (Sandbox Code Playgroud)
ps aux | grep …Run Code Online (Sandbox Code Playgroud)