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 等。
总结
查看进程信息的核心命令:
- ps aux:看所有进程的基本信息
- ps -p PID -o lstart:看某个进程的启动时间
- lsof -p PID:看某个进程打开了哪些文件
- lsof -i :端口:看某个端口被哪个进程占用
- lsof | grep deleted:看哪些已删除文件还被进程占用
ps 和 lsof 是运维排查问题的基本功,遇到问题先跑一遍这两个命令,大部分问题都能定位到方向。
遇到问题加QQ23979811 协助处理