“ls”命令在尝试列出过时的安装点时卡住。你如何杀死/阻止它?

“ls”命令在尝试列出过时的安装点时卡住。你如何杀死/阻止它?

当使用远程文件系统(例如sshfs或 )时smbfs,文件系统可能会由于网络问题而变得陈旧。为了检查挂载是否过时,我通常使用命令ls来查看是否可以列出远程挂载的内容。当这些远程挂载过时时,该ls命令只会等待很长时间,直到几分钟后输出类似以下内容的内容:

ls: cannot access '/mnt/remote': Input/output error

有没有办法停止该ls命令,而不是等待此错误在同一个 bash 会话中?常规的 Control+C 似乎无法完成这项工作。关闭 bash shell 是可行的,但这是不可取的。还有其他选择吗?

答案1

不,由于ls(或任何其他文件操作进程)处于“不间断睡眠”进程状态,因此没有任何东西可以中断它,甚至SIGKILL不能。

也许您可以在挂载远程文件系统时降低超时值。sshfsServerAliveIntervalServerAliveCountMax

答案2

不要试图杀人ls,而是解决问题的根源:过时的安装点。
卸载它!

umount当连接丢失时,正常可能无法工作,那么你可以使用umount -l

-l,--懒惰
懒惰卸载。现在将文件系统从文件层次结构中分离出来,并在该文件系统不再繁忙时立即清除对此文件系统的所有引用。
[...]
umount -l 的推荐用例是防止由于无法访问的网络共享而导致关机时挂起,而正常的 umount 将由于服务器宕机或网络分区而挂起。

sudo umount -l /path/to/mountpoint

您可以先尝试“正常” umount,如果失败`umount -l,例如:

sudo timeout 10 umount /path/to/mountpoint \
|| sudo umount -l /path/to/mountpoint

答案3

停止所有ls进程:

pkill --signal SIGKILL ls

相关内容