标签: proc

dd 的 /proc/meminfo 中存在脏信息

我从这里读到以下命令为我提供了需要写入磁盘的数据量。

\n\n
grep ^Dirty /proc/meminfo\n
Run Code Online (Sandbox Code Playgroud)\n\n

它特别提到,曾经问自己“如果我按下重置按钮,会丢失多少数据?”

\n\n

我想测试上面的命令,所以我做了以下操作。

\n\n
dd if=/dev/urandom of=sample.txt bs=1G count=1\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,在另一个 shell 中我运行了上述命令。

\n\n
grep ^Dirty /proc/meminfo\nDirty:                44 kB\ngrep ^Dirty /proc/meminfo\nDirty:                36 kB\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果我使用它的报告进行文件复制cp

\n\n
grep Dirty /proc/meminfo\nDirty:            387680 kB\ngrep Dirty /proc/meminfo\nDirty:            609172 kB\n
Run Code Online (Sandbox Code Playgroud)\n\n

我从这个页面看到Dirty 做了什么。

\n\n
\n

脏 \xe2\x80\x94 等待写回磁盘的内存总量(以千字节为单位)。

\n
\n\n

为什么Dirty不报告任何尺寸dd

\n

memory io proc

3
推荐指数
1
解决办法
3738
查看次数

为什么 /proc 不能成为 Linux 上的一层覆盖文件系统(overlayfs)?

在linux上(4.4.59和4.9.8测试过)运行以下命令会失败:

mkdir -p /tmp/proc
mount -t overlay overlay -o lowerdir=/proc:/tmp/proc /tmp/proc
Run Code Online (Sandbox Code Playgroud)

并且有一条错误消息dmesg

overlayfs: maximum fs stacking depth exceeded
Run Code Online (Sandbox Code Playgroud)

为什么不能/proc是覆盖文件系统的一层?
如果我替换/proc/devor /sys,它安装时不会出现问题,所以看起来/proc.

PS 用例是创建一个更安全的chroot环境,我想/dev在. 有 2 个已知的解决方法:/sys/procchroot

  1. 只读绑定挂载。限制是两个命令,而不是必需的一个。
  2. 只读特殊安装:mount -t proc -o ro none /tmp/proc. 限制是子安装不会自动映射。

不管怎样,我仍然很好奇为什么/dev并且/sys可以很好地使用叠加,但/proc事实并非如此。

该问题是从 stackoverflow迁移的。

linux mount proc overlayfs

3
推荐指数
1
解决办法
1750
查看次数

为什么在 /proc/[PID]/io 中忽略了 memmap IO

我有一个问题 /proc/[PID]/io 和 memmap 我需要分析使用 python 库astropy 的应用程序 IO 。
我遇到的问题之一是 /proc/[PID]/io.io 中的 IO 读/写总字节数不正确。

我有一个脚本copy.sh

#!/bin/bash
cp huge.fits huge.2.fits
#python copyfits.py
#python copyfitsMemmapOFF.py
sleep 5 
cat /proc/$$/io
Run Code Online (Sandbox Code Playgroud)

我注释了cp要为每个测试运行的行和行。

copyfits.py 包含:

from astropy.io import fits    
hdulist = fits.open('huge.fits', mode='readonly')
hdulist.writeto('huge.2.fits')
hdulist.close()
Run Code Online (Sandbox Code Playgroud)

copyfitsMemmapOFF.py 包含:

    from astropy.io import fits    
    hdulist = fits.open('huge.fits', mode='readonly', memmap=False)
    hdulist.writeto('huge.2.fits')
    hdulist.close()
Run Code Online (Sandbox Code Playgroud)

下面是每个解决方案的 IO 结果:

cp huge.fits huge.2.fits

rchar: 9749929202
wchar: 9749551680
Run Code Online (Sandbox Code Playgroud)

python copyfits.py

**rchar: 8399421**
wchar: 9749551685
Run Code Online (Sandbox Code Playgroud)

python copyfitsMemmapOFF.py

rchar: 9757502959 …
Run Code Online (Sandbox Code Playgroud)

memory io proc

3
推荐指数
1
解决办法
255
查看次数

什么是 Ubuntu Server 中的 proc/ 目录

我正在浏览我的一台 Ubuntu 服务器,想知道proc/文件夹下的数字1-26758是什么。这些端口还是别的什么?

ubuntu proc

3
推荐指数
1
解决办法
4844
查看次数

获取正在运行的命令的最新输出

我有一个命令运行了很长时间,我不想打扰它。但是,我想继续检查这个过程(大部分时间是远程的)。我通过像命令不断地监测这过程topiotopstat等。该处理是基于终端的方法,该方法不是通过启动screentmux或类似。所以检查输出的唯一方法是使用物理访问。

我知道其中/proc包含有关该过程的大量信息。所以我想知道它是否也可以显示输出(甚至只是最后一批输出——字符/字/行)。我搜索了/proc/<pid>/fd,但找不到任何有用的东西。

下面是输出 ls -l /proc/26745/fd/*

lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/0 -> /dev/pts/17
lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/1 -> /dev/pts/17
lrwx------ 1 user user 64 Sep 27 22:27 /proc/26745/fd/2 -> /dev/pts/17
Run Code Online (Sandbox Code Playgroud)

任何指针?

process monitoring proc output

3
推荐指数
1
解决办法
625
查看次数

不存在的 sid/pgid 进程如何可能?

我在 Ubuntu 17.04 上列出了进程,注意到以下进程:

root@user-virtual-machine:~# ps  xao pid=,ppid=,pgid=,sid=
1603      1   1601   1601
Run Code Online (Sandbox Code Playgroud)

但是进程 1601 不存在。

root@user-virtual-machine:~# ls /proc/1601
ls: cannot access '/proc/1601': No such file or directory
Run Code Online (Sandbox Code Playgroud)

正如你所看到的 /proc/1603/status 仍然引用 1601。

root@user-virtual-machine:~# cat /proc/1603/status
Name:   VGAuthService
Umask:  0000
State:  S (sleeping)
Tgid:   1603
Ngid:   0
Pid:    1603
PPid:   1
TracerPid:  0
Uid:    0   0   0   0
Gid:    0   0   0   0
FDSize: 64
Groups:  
NStgid: 1603
NSpid:  1603
NSpgid: 1601
NSsid:  1601
Run Code Online (Sandbox Code Playgroud)

重要的是,我在主机上(不在容器内)。

怎么可能?如何为不存在的进程设置 setid/setpgid?

process proc

3
推荐指数
1
解决办法
286
查看次数

如何在不使用 ifconfig/ip 命令的情况下列出 Linux 上的网络设备和 ipv4 地址

这不是如何获取我自己的 IP 地址并将其保存到 shell 脚本中的变量?; 这是尝试恢复How can I list net work devices and ipv4 address on linux without ifconfig/ip command,该命令已被错误地标记为第一个命令的重复项。

那么,在 ip、netstat 或 ifconfig 都不可用的系统中,如何才能看到旧版 IPv4 地址呢?

该系统是一个运行最新 debian 的 docker 容器。

linux proc network-interface

3
推荐指数
1
解决办法
1716
查看次数

`ll /proc/self/fd/` (来自 `ll /dev/fd`)的输出是什么意思?

相关但重复:

  1. /dev/fd 不一致
  2. /dev/fd 与 /proc/self/fd/ 有何关系?
  3. 为什么进程替换会产生一个名为 /dev/fd/63 的文件,该文件是一个管道?

alias ll='ls -alF'在 Ubuntu 18.04 和 20.04(Ubuntu在 中定义)上,我看到“软盘驱动器”~/.bashrc设备的以下输出:/dev/fd

为了ls

$ ls /dev/fd
0  1  2  3
Run Code Online (Sandbox Code Playgroud)

为了ll

$ ll /dev/fd
lrwxrwxrwx 1 root root 13 Nov  5 11:46 /dev/fd -> /proc/self/fd/
Run Code Online (Sandbox Code Playgroud)

我可以看到/dev/fd是 的符号链接/proc/self/fd/,所以我ll看到:

$ ll /proc/self/fd/
total 0
dr-x------ 2 username username  0 Nov  8 19:01 ./
dr-xr-xr-x 9 username username  0 Nov …
Run Code Online (Sandbox Code Playgroud)

file-descriptors devices proc

3
推荐指数
1
解决办法
9539
查看次数

IPv6环回地址的二进制格式

在一个终端中,我跑了

$ nc -l -6 ::1 5000
Run Code Online (Sandbox Code Playgroud)

在另一个终端,我跑了

$ cat /proc/net/tcp6
Run Code Online (Sandbox Code Playgroud)

并看到这一行:

   0: 00000000000000000000000001000000:1388 00000000000000000000000000000000:0000 ...
Run Code Online (Sandbox Code Playgroud)

为什么说我在听::1:0:0:0而不是在听::1

proc ipv6

3
推荐指数
1
解决办法
230
查看次数

系统空闲时间 &gt; 系统正常运行时间?

我在做某事时正在测试 linux api,但卡在了以下输出上。

[Abhii@localhost net]$ cat /proc/uptime
39135.53 149657.73
Run Code Online (Sandbox Code Playgroud)

根据规范,第一个数字应该是正常运行时间,第二个数字应该是系统保持空闲的时间。

那么为什么前者比后者少???

作为额外的信息,我的版本信息

Linux version 3.5.2-3.fc17.x86_64 (mockbuild@) (gcc version 4.7.0 20120507 (Red Hat 4.7.0-5) (GCC) ) #1 SMP Tue Aug 21 19:06:52 UTC 2012
Run Code Online (Sandbox Code Playgroud)

linux cpu proc uptime

2
推荐指数
1
解决办法
1465
查看次数