..

linux下lsof命令的实现方式

linux 下要实现 losf 主要是依靠 linux 内核对外暴露的 procfs 文件系统,在 linux 上有一个特殊的文件目录 /proc 这个目录记录了当前系统运行的状态信息,除了少数量文件大部分文件都是不能写入的,比如 tcp 网络信息可以从 /proc/net/tcp/proc/net/tcp6获取,后者是针对 ipv6 的连接信息,对应每个进程也有单独的文件夹/proc/pid/,比如要看 pid 为 10098 的进程的网络信息,可以看 /proc/10098/net/tcp/proc/10096/net/tcp6,如果要看打开的文件信息,可以看/proc/10098/fd/ 这个里面,如果要看进程的环境变量,可以看 /proc/10098/environ 这个文件,要看进程信息,可以看 /proc/10098/task 这个文件。 lsof 这个命令会打开所 /proc 目录下的所有文件,所以当你要查找某个文件被那个进程打开或者端口被占用的时候,可以很快的找到.