ls 在 strace 下的行为不同

use*_*507 7 networking sshfs strace

我不知道如何调试这种情况:

1)我尝试执行:

ls /home/user
Run Code Online (Sandbox Code Playgroud)

2) ls 阻止并且不打印任何内容。我认为这是因为 /home/user 包含 /home/user/sshfs_files,这是一个 sshfs 挂载目录,但我的机器上的网络出现故障(网络再次启动,但我猜 SSH 连接已丢失)。

3) 因为我想确定挂载的目录是 sshfs 的原因,所以我在 strace 下尝试了相同的命令:

strace -o /tmp/log ls /home/user
Run Code Online (Sandbox Code Playgroud)

4) ls 确实有效!所以现在的情况是 ls 在 strace 下工作但它自己阻塞。

怎么可能?如何解释这种情况?如果 ls 没有在 strace 下阻塞,我如何查看它的阻塞位置?

谢谢!

roz*_*acz 5

正如jw13 所指出的,这几乎是“ ls 在小目录中花费很长时间”的完全重复——至少就解释而言。请务必阅读那里的评论!

简而言之,当一些流行的命令行程序ls的输出不直接进入终端时,它们的运行方式可能会有所不同。在这种情况下,ls可能别名为ls --color=auto,为了着色目的,尝试检测每个目录条目的类型。此时它挂起,无法stat对您的 sshfs 挂载目录执行操作。

添加到MadScientist 对上述问题的回答:如果您对如何stracegdb可以帮助调试ls' 行为感到好奇,我建议您运行类似

 strace -o /tmp/log ls --color=always /home/user
Run Code Online (Sandbox Code Playgroud)