标签: lsof

持续监控进程打开/访问的文件

lsof -p 12345 将列出 pid 为 12345 的进程打开的所有文件,但仅限于特定的时间。

我们如何从开始到结束(直到进程终止)持续监视进程以列出/显示进程在其整个生命周期中访问的每个文件?

linux display process lsof

27
推荐指数
2
解决办法
3万
查看次数

关闭打开的文件而不终止进程

我在 CentOS 7 上运行了 java(yeah java...) 应用程序。过了一会儿,有很多“已删除”的文件困扰着我。

对于使用的已删除文件(不是问题):

lsof | grep "(deleted)"
Run Code Online (Sandbox Code Playgroud)

我在 /proc/pid/fd/... 中找到了它们,我的问题是如何在不杀死进程的情况下杀死/删除它们(进程必须 24/7 运行)。

我在google上看到我可以使用gdb工具,但我不知道如何使用它。你能帮我吗(只是写一步一步的手册)?

如果您有其他建议,我很乐意听取。

linux java process gdb lsof

11
推荐指数
1
解决办法
4万
查看次数

lsof 报告没有文件在外部卷上打开,但仍然无法安全卸载

我已经在 SX 和其他地方搜索过这里,但没有找到一种方法来解决我的问题。我在外部 Firewire 驱动器上有一个卷(由 Time Machine 使用)。连接驱动器后,它有 3 个卷。三分之二的弹出没有问题,但最后一个 (LaCie) 永远无法卸载,除非强制(例如$ umount -f LaCie)。我可以看到驱动器几乎连续被访问,但我不知道哪个进程正在执行此操作;和lsof帮助有限。大多数情况下它不会返回如下结果,但偶尔会报告 Finder 在卷上打开了一个目录。但我不明白为什么会出现问题,因为在卸载卷时 Finder 应该关闭所有打开的文件或目录。这个问题是在我升级到 Mountain Lion 后才出现的。我使用了一个克隆工具(SuperDuper!),但确保它没有运行;并且lsof似乎证实了这一点。我还能如何找出锁定音量的原因?每次我想断开驱动器的连接时,我都不热衷于强行弹出卷,因为我肯定会冒主备份磁盘上的数据丢失的风险。

~ $ sudo diskutil unmount /Volumes/LaCie/ 
Volume LaCie on disk1s1 failed to unmount 
~ $ lsof | grep LaCie
~ $ lsof | grep /Volumes/LaCie
~ $
Run Code Online (Sandbox Code Playgroud)

unmount lsof macos

7
推荐指数
1
解决办法
2389
查看次数

使用strace调试连接超时?

我试图弄清楚为什么 Eclipse 会旋转,所以我决定启动 strace。

我使用以下方法找到了 eclipse 过程:

$ ps ax | grep java
 5546 ?        Sl    19:04 /usr/bin/java ... [arguments omitted]
Run Code Online (Sandbox Code Playgroud)

通过strace在这个进程上运行,我看到它正在等待另一个进程:

$ sudo strace -p 5546
Process 5546 attached - interrupt to quit
futex(0x7f6c416679d0, FUTEX_WAIT, 5547, NULL^C <unfinished ...>
Process 5546 detached
Run Code Online (Sandbox Code Playgroud)

有趣的是,进程 5547 没有出现在ps(谁能告诉我为什么?),但我可以strace。它反复吐出很多 EAGAIN 失败(偶尔成功)

read(16, 0x7f6c41664d10, 16)            = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(15, 0x7f6c3815f2e4, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {67410, 357843264}) = 0 …
Run Code Online (Sandbox Code Playgroud)

linux eclipse debug strace lsof

6
推荐指数
1
解决办法
2万
查看次数

在 lsof 中查找监听通配符地址的进程

使用lsof,我可以找到所有带有 TCP 套接字侦听连接的进程:

lsof -Pni -sTCP:LISTEN

例如:

COMMAND   PID   USER  FD  TYPE  DEVICE SIZE/OFF NODE NAME
cupsd     662   root  7u  IPv6   11108      0t0  TCP [::1]:631 (LISTEN)
cupsd     662   root  8u  IPv4   11109      0t0  TCP 127.0.0.1:631 (LISTEN)
rsyncd    905   root  4u  IPv4   13379      0t0  TCP *:873 (LISTEN)
...
Run Code Online (Sandbox Code Playgroud)

有什么方法(不将输出管道传送到另一个程序,例如grep, awk, 或sed)来限制它监听通配符地址的 TCP 套接字?尝试:

$ lsof -Pni @0.0.0.0 -sTCP:LISTEN
lsof: incomplete Internet address specification: -i @0.0.0.0
Run Code Online (Sandbox Code Playgroud)

$ lsof -Pni @\* -sTCP:LISTEN
lsof: unknown host …
Run Code Online (Sandbox Code Playgroud)

tcp lsof

5
推荐指数
1
解决办法
1140
查看次数

如果知道进程打开的文件的文件描述符,如何在 linux 命令上打印文件名?

我知道进程打开的文件的文件描述符,但我不知道进程 ID。如果我知道进程打开的文件的文件描述符,如何从 Linux 命令提示符打印文件名?

linux command-line linux-mint lsof

5
推荐指数
1
解决办法
3834
查看次数

无法卸载 dmg。持续显示“资源繁忙”

“工作区”是一个加密的 dmg,我在其中保存代码。我通常不会卸载它,但我需要进行备份,但它拒绝让我卸载:

\n\n
mark@mark-macbook-air /Volumes$ lsof | grep Workspace\nmark@mark-macbook-air /Volumes$ lsof Workspace\nmark@mark-macbook-air /Volumes$ hdiutil detach /Volumes/Workspace\nhdiutil: couldn\'t unmount "disk1" - Resource busy\nmark@mark-macbook-air /Volumes$ hdiutil unmount /Volumes/Workspace\nhdiutil: unmount: "/Volumes/Workspace" failed to unmount due to error 49168.\nhdiutil: unmount failed - Resource busy\nmark@mark-macbook-air /Volumes$ ls\nMacintosh HD@ Workspace/\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我尝试通过 Finder 卸载:

\n\n
"The disk \xe2\x80\x9cWorkspace\xe2\x80\x9d couldn\xe2\x80\x99t be ejected because \xe2\x80\x9cTerminal\xe2\x80\x9d is using it.".\n
Run Code Online (Sandbox Code Playgroud)\n\n

我只打开了一个终端窗口。看来我可以关闭终端,但因为我很确定它没有使用它,所以我运行sudo lsof并看到了几个“mds”和一个“login”。MDS 是聚光灯的一部分,因此我在卷上禁用了聚光灯索引。这杀死了一些进程。我现在只剩下两个:

\n\n
mark@mark-macbook-air /Volumes$ sudo lsof /Volumes/Workspace/\nCOMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME\nlogin …
Run Code Online (Sandbox Code Playgroud)

dmg-image hdiutil lsof macos

5
推荐指数
2
解决办法
2万
查看次数

如何找到给定目录中打开的所有文件?

我知道我可以lsof用来列出打开的文件,我知道我可以用来find在给定目录中通过 inode 查找文件。

但是如何有效地结合这两个程序来列出在给定目录中打开的所有打开文件?或者有没有更好的方法来回答这个问题?

linux find lsof

3
推荐指数
2
解决办法
1571
查看次数

标签 统计

lsof ×8

linux ×5

macos ×2

process ×2

command-line ×1

debug ×1

display ×1

dmg-image ×1

eclipse ×1

find ×1

gdb ×1

hdiutil ×1

java ×1

linux-mint ×1

strace ×1

tcp ×1

unmount ×1