目录
一、简介
1、概述
我们知道在Linux系统中的一切都可以被视为文件,文件可以分为:普通文件、目录文件、链接文件和设备文件。在操作这些所谓的文件时,我们每次都会找到一个名字,这需要很多时间和效率。Linux规定每个文件对应一个索引,以便在操作文件时,我们可以直接找到索引进行操作。
文件描述符(file descriptor)为了有效地管理这些已经打开的文件创建的索引,它是一个非负整数(通常是小整数),用于指代打开的文件,所有执行I/O操作系统的呼叫是通过文件描述符实现的。同时,还规定,当系统刚刚启动时,0是标准输入,1是标准输出,2是标准错误。
2、图示解释
FD是访问文件的标识,即链接文件:
0是键盘只读。
1、2是终端,可以理解是屏幕。
3+是文件,可读可写。
二、查看进程的FD信息
通过熟悉的vim的进程来观察进程的FD信息
1、通过vim查看进程FD信息
1)通过一个终端,打开一个文本
命令:vim 文件名
[root@localhost ~]# vim /test/file1 //编辑file1文件
2)通过另一个终端,查询文本进程的进程号
命令:ps aux | grep vim
[root@localhost ~]# ps aux | grep vim //查看vim进程
root 2558 0.0 0.5 149808 5540 pts/0 S+ 08:22 0:00 vim /test/file1
root 2615 0.0 0.0 112824 976 pts/1 R+ 08:23 0:00 grep --color=auto vim
//进程号为2558
3)在/proc目录中查看文本进程的FD
首先介绍一下proc
ls /proc //查看proc目录内容
[root@localhost ~]# ls /proc
1 1828 2102 2291 281 405 694 buddyinfo meminfo
10 1841 2111 2292 285 406 695 bus misc
11 1853 2116 2294 287 407 697 cgroups modules
1120 1854 2126 23 291 41 698 cmdline mounts
1122 1881 2132 2304 292 43 7 consoles mpt
1124 1885 2133 2305 294 44 700 cpuinfo mtrr
1126 1890 2137 2306 296 45 701 crypto net
1136 19 2144 2307 297 47 702 devices pagetypeinfo
1149 1971 2148 2327 3 489 704 diskstats partitions
1151 1985 2150 2332 30 5 706 dma sched_debug
1152 1990 2154 2336 300 506 707 driver schedstat
13 1996 2157 2338 301 525 717 execdomains scsi
1359 2 2158 2341 31 569 736 fb self
1361 20 2159 2360 32 573 738 filesystems slabinfo
1387 2022 2180 24 33 574 744 fs softirqs
14 2034 2183 2407 372 577 749 interrupts stat
1402 2038 2186 2412 373 580 751 iomem swaps
1403 2043 2187 2457 383 582 756 ioports sys
1435 2046 2188 2463 384 586 760 irq sysrq-trigger
15 2054 2192 2464 396 588 761 kallsyms sysvipc
1597 2058 2197 25 397 6 8 kcore timer_list
16 2060 22 2558 398 60 807 keys timer_stats
1655 2065 2204 2570 399 663 809 key-users tty
1665 2074 2208 264 4 665 824 kmsg uptime
1667 2076 2213 2649 400 667 862 kpagecount version
17 2080 2242 2650 401 669 9 kpageflags vmallocinfo
1753 2093 2264 278 402 670 95 loadavg vmstat
18 2094 2274 279 403 692 acpi locks zoneinfo
1815 21 2275 280 404 693 asound mdstat
所有的进程都会存放到该目录中,刚刚的vim进程也在其中(进程号为2558,倒数第八行的第四列),每运行一个进程proc目录中都会多出一个相应的进程号命名的文件夹。
查看2558目录的内容
[root@localhost ~]# ls /proc/2558
attr cwd map_files oom_adj schedstat task
autogroup environ maps oom_score sessionid timers
auxv exe mem oom_score_adj setgroups uid_map
cgroup fd mountinfo pagemap smaps wchan
clear_refs fdinfo mounts patch_state stack
cmdline gid_map mountstats personality stat
comm io net projid_map statm
coredump_filter limits ns root status
cpuset loginuid numa_maps sched syscall
在第二列的第四行有个fd文件,里面存放了fd信息
查看进程2558的fd信息
[root@localhost ~]# ls /proc/2558/fd
0 1 2 4
2558的fd信息为0,1,2,4
你的点赞是对我的激励!!!
你的评论是对我的勉励!!!
你的收藏是对我的认可!!!
你的关注是我们之间距离的增进!!!