首页·终端命令

lsof

进程与系统

用法

lsof -i :<port>

列出所有打开的文件和套接字,这就是回答“谁占着 3000 端口”的办法;不加 sudo 只能看到自己的进程,所以结果为空并不表示端口是空的。

常用选项

选项含义
-i :3000Which process holds port 3000, in either direction.
-i TCP -sTCP:LISTENListening TCP sockets only.
-tPrint bare PIDs, made for piping into kill.
-p <pid>Everything one process has open.
-u <user>One user's open files.
+D <dir>Every open file underneath a directory, recursively.
-n -PSkip host and port name lookups, which makes it much faster.

示例

lsof -i :3000

The classic answer to "something is already using port 3000".

kill -9 $(lsof -ti :3000)

Kill whatever holds that port.

sudo lsof +D /var/log

Find the process keeping a deleted log file open.

看什么在跑、什么在吃机器。先弄清是什么,再决定杀不杀。

怎么看

  • 方括号 [ ] 表示这部分可以不写。
  • 省略号 … 表示可以写多个。
  • 选项区分大小写——有些命令里 -r 和 -R 不是一回事。

常见问题

Q. lsof 是做什么的?

列出所有打开的文件和套接字,这就是回答“谁占着 3000 端口”的办法;不加 sudo 只能看到自己的进程,所以结果为空并不表示端口是空的。

Q. 怎么写?

lsof -i :<port> —— 方括号表示可以省略的部分。

Q. 值得记的选项有几个?

这里列了 7 个,完整列表在 man lsof。这条命令属于进程与系统。

相关命令

man 手册: man lsof