顶部命令在Linux中如何工作?它如何给出实时输出



我正在探索 top命令的工作方式,并逐渐从服务器及其演示文稿中获取信息。以下是我的发现,您是否可以给予一些合理的重点以了解这一点。

以获取您的信息:

我在第一个会话中运行了top命令,并在另一个会话中给出了lsof -c top。它的产量下降

# lsof -c top
COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF       NODE NAME
top     86597 root  cwd    DIR  253,0      4096   67149954 /root
top     86597 root  rtd    DIR  253,0      4096        128 /
top     86597 root  txt    REG  253,0    106944      10467 /usr/bin/top
top     86597 root  mem    REG  253,0     50744   33803265 /usr/lib64/libnuma.so.1
top     86597 root  mem    REG  253,0 106075056   33803109 /usr/lib/locale/locale-archive
top     86597 root  mem    REG  253,0     68192   33576550 /usr/lib64/libbz2.so.1.0.6
top     86597 root  mem    REG  253,0     90248   33588715 /usr/lib64/libz.so.1.2.7
top     86597 root  mem    REG  253,0    100008   33804478 /usr/lib64/libelf-0.172.so
top     86597 root  mem    REG  253,0    402384   33588705 /usr/lib64/libpcre.so.1.2.0
top     86597 root  mem    REG  253,0     19896   34975734 /usr/lib64/libattr.so.1.1.0
top     86597 root  mem    REG  253,0    141968   33804335 /usr/lib64/libpthread-2.17.so
top     86597 root  mem    REG  253,0     88776   33597070 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
top     86597 root  mem    REG  253,0    330464   33807284 /usr/lib64/libdw-0.172.so
top     86597 root  mem    REG  253,0    105824   33804337 /usr/lib64/libresolv-2.17.so
top     86597 root  mem    REG  253,0     19384   33576919 /usr/lib64/libgpg-error.so.0.10.0
top     86597 root  mem    REG  253,0    535064   33576927 /usr/lib64/libgcrypt.so.11.8.2
top     86597 root  mem    REG  253,0     85952   33906471 /usr/lib64/liblz4.so.1.7.5
top     86597 root  mem    REG  253,0    157400   33588725 /usr/lib64/liblzma.so.5.2.2
top     86597 root  mem    REG  253,0    155784   33804371 /usr/lib64/libselinux.so.1
top     86597 root  mem    REG  253,0     43776   33804347 /usr/lib64/librt-2.17.so
top     86597 root  mem    REG  253,0   1137016   33804038 /usr/lib64/libm-2.17.so
top     86597 root  mem    REG  253,0     20032   33577001 /usr/lib64/libcap.so.2.22
top     86597 root  mem    REG  253,0   2151672   33803924 /usr/lib64/libc-2.17.so
top     86597 root  mem    REG  253,0     19288   33804036 /usr/lib64/libdl-2.17.so
top     86597 root  mem    REG  253,0    174576   33990961 /usr/lib64/libtinfo.so.5.9
top     86597 root  mem    REG  253,0    163704   33990950 /usr/lib64/libncurses.so.5.9
top     86597 root  mem    REG  253,0    203800   33598907 /usr/lib64/libsystemd.so.0.6.0
top     86597 root  mem    REG  253,0     78840   33577018 /usr/lib64/libprocps.so.4.0.0
top     86597 root  mem    REG  253,0    163400   33803344 /usr/lib64/ld-2.17.so
top     86597 root  mem    REG  253,2    217032   50448935 /var/db/nscd/passwd
top     86597 root    0u   CHR  136,1       0t0          4 /dev/pts/1
top     86597 root    1u   CHR  136,1       0t0          4 /dev/pts/1
top     86597 root    2w   CHR    1,3       0t0       1040 /dev/null
top     86597 root    3u   CHR  136,1       0t0          4 /dev/pts/1
top     86597 root    4r   REG    0,3         0 4026532029 /proc/stat
top     86597 root    5r   REG    0,3         0 4026532030 /proc/uptime
top     86597 root    6r   REG    0,3         0 4026532028 /proc/meminfo
top     86597 root    7r   REG    0,3         0 4026532027 /proc/loadavg

沿着这些行,当我们输入顶部命令时,它将冒险到这些LIB记录,最后从/proc文件中获取数据并给出了收率。我的询问仅按照statuptimememinfoloadavg文件进行。该过程信息及其捕获的位置以及如何显示流程信息的输出何处。您能给我提供有关此的更多详细信息吗?

顶部(1)和PS(1) - 许多其他命令正在使用/proc/(通过libprocfs库)。阅读Proc(5)。在Linux上,/proc/是查询Linux内核有关其整个系统状态的通常方法。

/proc/文件系统(称为procfs)是"虚拟",因为Linux内核是 lazily 计算其内容而无需从磁盘中获取任何数据的意义。每个过程都有/proc/的目录描述。因此,/proc/1234/描述了PID 1234的过程。

您可以通过直接读取/proc/目录(使用OpenDir(3)readdir(3)闭合(3)cloteir(3)stat(2)目录及其条目来模仿ps的作用(2)2)用于文件等...)

在实践中,对于诸如/proc/vmstat/proc/meminfo/proc/1234/maps之类的伪文件,您最好快速打开,阅读和关闭它们(实际上,这可能会在不到一毫秒的时间内发生)。另请参阅此问题。

您在问:

top命令如何在Linux上工作?

btw, top命令是免费软件。因此,请下载其源代码(以及libprocps的源代码),然后对其进行研究。我猜top正在扫描每秒 /proc/目录(但这是如此之快,以至于您不太可能捕获该目录扫描,您的lsof命令在实践中不会捕获)。

)。

您可以使用Strace(1)捕获所有系统调用(由top等命令完成),然后您会看到诸如/proc/1234/之类的目录被打开,扫描并通过top快速关闭,以至于lsof -c top DON DON DON'看他们。

最新更新