linux 查看文件被哪个进程占用

linux 查看文件被哪个进程占用,第1张

1)使用lsof命令lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件。在linux系统下,基本上所有的东西都可以被当作文件来用。socket当然也是一种文件了。所以lsof可以用来查找谁用了某一个端口。具体方法:lsof -i :port_number grep "(LISTEN)"-i是用来查找和网络相关的文件,":"号是必须的,它是标志你查找的是一个端口。port_number就是你要查找的端口号,譬如你要查找是否 有程序占用了oracle的监听端口1521,就可以使用lsof -i :1521 |grep "(LISTEN)"。如果有程序已经占用了,那么下面打印的第二个字段就是该程序的进程id,第一个字段是进程的名字。如果只有losf -i :port_number可能会查到很多应用程序,但这些程序实际并没有占用你指定的端口,这些端口只是连接到本机器或者别的机器的该端口。所以要grep "(LISTEN)“,因为一个端口只可能被一个程序占用的,所以这种方法是可靠的。2)使用netstat 命令大家一定对这个命令比较熟悉了,可能你从没有想到用到来查找哪一个程序的占用了指定的端口。但是netstat -an 的确提供了这种功能。所以有问题了一定要想到先去查找man手册,不过说实话,某些man手册写得让中国人看不懂,那没有办法了,就googe或者 baidu一下吧。执行man netstat命令,你会发现netstat 提供了'-p'的选项,这个选项的功能是告诉你哪个程序占用了该端口,但是她提供的形式比较古怪是以pid/process_name提供的。pid当然 是进程id了,process_name是进程的命令,中间以'/'号分隔。和上面的原因一样,我们只查找listen的端口,netstat 给我们提供了-l的选项,这个选项不是默认的选项。下面以1521端口来看怎么查找到该程序,我们使用下面的命令:netstat -lnpawk 'BEGIN{prt=":1521$"}{if ($4 ~ prt) print $0}'在这里使用awk来匹配第4个字段的模式是为了避免误判。

原来跑着的MySQL挂了, 最终定位问题是机器内存不够了, 为什么内存不够了呢? 想到前两天部署的服务, 所以想看下该服务的当前的内存占用情况

注意 : 这里显示的内存信息是系统层面的进程的内存使用情况

Linux中查看某个进程占用内存的情况,执行如下命令即可,将其中的[pid]替换成相应进程的PID号:

说明

/proc/[pid]/status中所保存的信息除了内存信息,还包括进程IDs、信号等信息,此处暂时只介绍内存相关的信息。

字段 说明

1、用ps -ef |grep xxxxx 得到该进程的pid

2、输入ls -l ,结果中 exe链接对应的就是可执行文件的路径

$ ls -l /proc/18283

以下是/proc目录中进程18283的信息

/proc/18283 pid为N的进程信息

/proc/18283/cmdline 进程启动命令

/proc/18283/cwd 链接到进程当前工作目录

/proc/18283/environ 进程环境变量列表

/proc/18283/exe 链接到进程的执行命令文件

/proc/18283/fd 包含进程相关的所有的文件描述符

/proc/18283/maps 与进程相关的内存映射信息

/proc/18283/mem 指代进程持有的内存,不可读

/proc/18283/root 链接到进程的根目录

/proc/18283/stat 进程的状态

/proc/18283/statm 进程使用的内存的状态

/proc/18283/status 进程状态信息,比stat/statm更具可读性


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8742746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存