.每一个进程都有自己的文件描述符集合.
.当创建进程时,通常有3个打开文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO.
.当多个描述符指向同一个文件,每个文件描述符仍保持他独特的性能.
.由于文件描述符在一个进程中是特有的,因此不能在多个进程中间实现共享,而唯一的例外是在父/子进程之间,当一个进程调用fork时,调用fork时打开的所有文件在子进程和父进程中仍然是打开的,而且子进程写入文件描述符会影响到父进程的同一文件描述符,反之亦然.
.每一个进程都有自己的文件描述符集合.
.当创建进程时,通常有3个打开文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO.
.当多个描述符指向同一个文件,每个文件描述符仍保持他独特的性能.
.由于文件描述符在一个进程中是特有的,因此不能在多个进程中间实现共享,而唯一的例外是在父/子进程之间,当一个进程调用fork时,调用fork时打开的所有文件在子进程和父进程中仍然是打开的,而且子进程写入文件描述符会影响到父进程的同一文件描述符,反之亦然.
我们发现lsof不只是显示文件描述符,在lsof输出的最后四个文件是该进程的打开文件的文件描述符,0u代表的文件描述符为0,而255u代表的文件描述符为255,u的意思为可读可写.
除了这四个文件描述符外,在FD一栏还有cwd,rtd,txt,mem等几种类型,它们的意义如下:
cwd代表当前目录,这里是/root
rtd代表根目录,这里是/
txt代表执行的程序,这里是/bin/bash
mem代表映射到内存的文件,这里是/lib/libc-2.7.so等动态链接库
TYPE一栏表示文件/目录的类型,DIR代表目录,REG代表普通文件,CHR代表字符设备.
我们在伪终端1,执行vi -d /etc/hosts /etc/mtab
在伪终端2,用lsof查看打开的文件.
lsof -p 6195
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vi 6195 root cwd DIR 0,3 0 1 /proc
vi 6195 root rtd DIR 8,1 4096 2 /
vi 6195 root txt REG 8,1 1699024 686572 /usr/bin/vim.basic
vi 6195 root mem REG 8,1 47520 147727 /lib/libnss_files-2.7.so
vi 6195 root mem REG 8,1 43472 147716 /lib/libnss_nis-2.7.so
vi 6195 root mem REG 8,1 88968 147720 /lib/libnsl-2.7.so
vi 6195 root mem REG 8,1 31536 147722 /lib/libnss_compat-2.7.so
vi 6195 root mem REG 8,1 4636768 782032 /usr/lib/locale/locale-archive
vi 6195 root mem REG 8,1 17424 147652 /lib/libattr.so.1.1.0
vi 6195 root mem REG 8,1 14616 147734 /lib/libdl-2.7.so
vi 6195 root mem REG 8,1 1375536 147730 /lib/libc-2.7.so
vi 6195 root mem REG 8,1 23616 767588 /usr/lib/libgpm.so.2.0.0
vi 6195 root mem REG 8,1 29360 147707 /lib/libacl.so.1.1.0
vi 6195 root mem REG 8,1 109464 146602 /lib/libselinux.so.1
vi 6195 root mem REG 8,1 256288 147710 /lib/libncurses.so.5.7
vi 6195 root mem REG 8,1 119288 147733 /lib/ld-2.7.so
vi 6195 root 0u CHR 136,0 2 /dev/pts/0
vi 6195 root 1u CHR 136,0 2 /dev/pts/0
vi 6195 root 2u CHR 136,0 2 /dev/pts/0
vi 6195 root 4u REG 8,1 12288 480777 /etc/.hosts.swp
vi 6195 root 5u REG 8,1 12288 482077 /etc/.mtab.swp
我们看到vi创建了临时文件/etc/.hosts.swp和/etc/.mtab.swp,同时它的执行程序是/usr/bin/vim.basic,应该是确实是vi的二进制程序.
cwd是/proc,说明伪终端1下的当前目录是/proc。
其实我们可以通过w确认当前系统的伪终端,再通过lsof|grep 'pts/0'查看使用该伪终端的PID,最后用lsof -p PID查看该用户在做什么.
如果有具体的用户名,可以直接用lsof -u username来查看该用户当前加载的文件.
分享到:
相关推荐
linux下文件描述符最大限制默认最大为1024,通过 [root@localhost ~]# ulimit -n 1024 这个命令可以查看。此值可以修改。 进程的文件描述符,可以通过 [root@localhost ~]# ls -al /proc/13623/fd |wc -l 59 输出...
通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下: $ulimit -n 1024 当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的...
文档介绍了一)概述,二)父/子进程对文件描述符的分支使用示例,三)文件描述符与/proc,四)文件描述符与lsof命令,五)文件描述符的限制
基于linux ,使用select检测串口句柄事件,同时进行超时判断的串口485读写操作。为高效可控的linux串口操作例程。tcsetattr,tcflush,select,ioctl,gettimeofday。485收发方向切换。
Linux内核中的文件描述符.docx
Linux中通过Socket文件描述符寻找连接状态介绍.docx
进程文件描述符(pidfd)提供了一种无竞争的方式来管理Linux上的进程,使用文件描述符而不是在进程退出后可以重用的数字进程ID(PID)来维护对进程的持久引用。 Linux的进程文件描述符(pidfd)提供了一种无竞争的...
在linux中,有时候我们只知道文件描述符却不知道它的名字及其完整的路径,如果我们想获取其路径该怎么办呢?其实很简单,在linux中每个被打开的文件都会在/proc/self/fd/目录中有记录,其中(/proc/self/fd/文件描述...
任务9.1 linux文件描述符 159 任务9.2 Shell输入/输出重定向 160 9.2.1 输出重定向 160 9.2.2 输入重定向 163 9.2.3 重定向深入讲解 164 任务9.2 Shell案例:通过重定向测试批量添加ip 166 练习(每题25分,共计100...
这里包含文件操作的一些用法,比如open read write lseek close 还有对文件添加读取锁和写入锁的一些内容
Linux将所有内核对象当做文件来处理,系统用一个size_t类型来表示一个文件对象,比如对于文件描述符0就表示系统的标准输入设备STDIN,通常情况下STDIN的值为键盘,如read命令就默认从STDIN读取数据,当然STDIN的值是...
主要介绍了Linux中文件描述符fd与文件指针FILE*互相转换实例解析,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
所有的Linux系统都会内建 vi 文书编辑器,目前主流使用比较多的是 vim 编辑器。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。Vim是从 vi 发展出来的一个文本编辑器。代码补完、...
在linux当中,每个进程会在进程控制块(PCB)当中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表都有一个指 向已经打开文件的指针。 每个linux进程都应该有三个标准的文件描述符,对应三个标准流。 ...
通过文件描述符恢复被误删除的文件(前提是文件正被某一个进程占用着,未被释放)
linux下,进程间传递文件描符的事例代码。
Linux系统编程——文件描述符的复制:dup()和dup2(),相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45870459
这又应该怎么办呢,你可能会用好几个月的时间来到处查资料来解决这个问题,而且可能一无所获,而当你看到我方所上传的这个文件可能会眼前一亮,但你可能又会想,能行吗,当然可行,本人亲测成功,当你下载这文件打开...
掌握Linux中系统调用的基本概念 ...掌握文件描述符的概念 掌握Linux下文件相关的不带缓存I/O函数的使用 掌握Linux下设备文件读写方法 掌握Linux中对串口的操作 熟悉Linux中标准文件I/O函数的使用