Linux查看进程启动时间,ps和lsof命令使用

前言

想知道某个进程跑了多久?或者想知道哪个进程打开了某个文件?这时候就需要用到 ps 和 lsof 两个命令了。ps 用来查看进程信息,包括启动时间、运行状态等;lsof 用来查看进程打开了哪些文件。这两个命令是运维排查问题的必备工具。本文就详细讲一下这两个命令的使用。

ps 命令

基本用法

ps aux

输出所有进程的详细信息。

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 128000  5000 ?        Ss   Oct01   0:05 /usr/lib/systemd/systemd
root      123  0.0  0.2 150000 10000 ?        Ss   Oct01   0:10 /usr/sbin/sshd
nginx    4567  0.0  0.3 200000 15000 ?        S    Oct05   0:02 nginx: worker process

各列含义

列 含义
USER 进程所属用户
PID 进程ID
%CPU CPU占用百分比
%MEM 内存占用百分比
VSZ 虚拟内存大小
RSS 物理内存大小
TTY 终端
STAT 进程状态
START 启动时间
TIME 累计CPU时间
COMMAND 启动命令

查看进程启动时间

ps -p PID -o lstart

比如查看PID为123的进程的启动时间:

ps -p 123 -o lstart

输出:

STARTED
Mon Oct  1 10:30:45 2026

查看某个进程的详细信息

ps aux | grep nginx

按CPU占用排序

ps aux --sort=-%cpu | head -10

按内存占用排序

ps aux --sort=-%mem | head -10

lsof 命令

lsof = list open files,用来查看进程打开了哪些文件。

基本用法

lsof

列出所有进程打开的所有文件。

查看某个进程打开的文件

lsof -p PID

比如查看PID为123的进程打开了哪些文件:

lsof -p 123

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

lsof 文件路径

比如查看 /var/log/nginx/access.log 被哪个进程占用:

lsof /var/log/nginx/access.log

查看某个端口被哪个进程占用

lsof -i :80

查看80端口被哪个进程占用。

查看某个用户打开的文件

lsof -u nginx

查看nginx用户打开的所有文件。

查看某个目录下被打开的文件

lsof +D /var/log/

查看 /var/log/ 目录下所有被打开的文件。

实际排查案例

案例1:磁盘空间没释放

删了一个大文件,但磁盘空间没释放。这是因为还有进程在写这个文件。

lsof | grep deleted

输出所有已删除但还被进程占用的文件。找到对应的PID,重启那个进程就能释放空间了。

案例2:端口被占用

启动Nginx的时候报错"Address already in use",说明80端口被占用了。

lsof -i :80

看是哪个进程占了80端口,杀掉或者换个端口。

案例3:进程启动时间不对

怀疑某个服务被重启过,看看启动时间。

ps -ef | grep nginx

或者更详细的:

ps -p PID -o lstart

案例4:找出谁在写日志

想知道哪个进程在写某个日志文件。

lsof /var/log/messages

常见坑

坑1:删了文件磁盘空间没释放

这是最常见的坑。删了大文件,但磁盘空间没释放,因为还有进程在写这个文件。

解决: 用 lsof | grep deleted 找到还在写这个文件的进程,重启那个进程,或者直接清空文件内容:

> /var/log/nginx/access.log

坑2:ps aux 和 ps -ef 搞混了

ps aux 和 ps -ef 输出格式不一样,但信息基本一样。aux 是BSD格式,-ef 是System V格式。看个人习惯。

坑3:lsof 输出太多

lsof 不加参数会输出一大堆,根本看不过来。一定要加参数过滤:-p、-i、-u、+D 等。

总结

查看进程信息的核心命令:

  1. ps aux:看所有进程的基本信息
  2. ps -p PID -o lstart:看某个进程的启动时间
  3. lsof -p PID:看某个进程打开了哪些文件
  4. lsof -i :端口:看某个端口被哪个进程占用
  5. lsof | grep deleted:看哪些已删除文件还被进程占用

ps 和 lsof 是运维排查问题的基本功,遇到问题先跑一遍这两个命令,大部分问题都能定位到方向。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:40