Как работает команда top в linux?Как это дает в режиме реального времени вывод? - PullRequest
0 голосов
/ 27 февраля 2019

Я изучаю, как работает команда 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 и дали доход.Мой запрос занял как раз файлы stat, uptime, meminfo и loadavg.Как насчет информации о процессе и где она захватывает и как она показывает вывод информации о процессе.Не могли бы вы дать мне более подробную информацию об этом?

1 Ответ

0 голосов
/ 27 февраля 2019

top (1) и ps (1) - и многие другие - команды используют /proc/ (через библиотеку libprocfs).Прочитайте proc (5) .В Linux /proc/ - это обычный способ запроса ядра Linux о состоянии всей системы.

Файловая система /proc/ (называемая procfs ) является «виртуальным» в том смысле, что ядро ​​Linux лениво вычисляет свой контент без извлечения каких-либо данных с диска.У каждого процесса есть каталог под /proc/, описывающий его.Так /proc/1234/ описывает процесс pid 1234.

Вы можете имитировать то, что ps делает, непосредственно читая каталог /proc/ (используя opendir (3) readdir (3) closedir (3) stat (2) для каталогов и их записей и open (2) read (2) close (2) для файлов и т. Д ...)

На практике для псевдофайлов, таких как /proc/vmstat, /proc/meminfo или /proc/1234/maps, вылучше открыть, прочитать и закрыть их быстро (практически, это произойдет, возможно, менее чем за одну миллисекунду).См. Также this и , на которые отвечает.

Вы спрашиваете:

Как команда top работает в Linux?

Кстати, команда top - это свободное программное обеспечение .Поэтому, пожалуйста, скачайте его исходный код (и исходный код libprocps), а затем изучите его.Я предполагаю, что top сканирует каждую секунду каталог /proc/ (но это происходит настолько быстро, что вы вряд ли поймаете это сканирование каталога, которое ваша команда lsof не уловит на практике).

Вы можете использовать strace (1) , чтобы перехватить все системные вызовы (выполненные с помощью такой команды, как top), и тогда вы увидитечто каталоги типа /proc/1234/ открываются, сканируются и закрываются так быстро top, что lsof -c top их не видит.

...