Command-Line

“ls”命令在試圖列出一個陳舊的掛載點時卡住了。你如何殺死/阻止它?

  • February 5, 2021

在使用遠端文件系統(例如sshfssmbfs)時,文件系統可能會由於網路問題而變得陳舊。為了檢查掛載是否過時,我通常使用命令ls查看是否可以列出遠端掛載的內容。當這些遠端掛載過時時,該ls命令會等待很長時間,直到幾分鐘後輸出類似於以下內容的內容:

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

有沒有辦法從同一個 bash 會話ls中停止命令,而不是等待這個錯誤?正常的 Control+C 似乎無法完成這項工作。關閉 bash shell 是可行的,但這是不可取的。有什麼選擇嗎?

不,因為ls(或任何其他文件操作程序)處於程序狀態“不間斷睡眠”,所以沒有什麼可以中斷它,甚至SIGKILL不能。

也許您可以在掛載遠端文件系統時降低超時值。sshfsServerAliveIntervalServerAliveCountMax

不要試圖殺死ls,而是修復問題的根源:陳舊的掛載點。

解除安裝它!

umount當連接失去時,正常可能無法正常工作,那麼您可以使用umount -l

-l, –lazy

延遲解除安裝。現在從文件層次結構中分離文件系統,並在它不再忙時清理對該文件系統的所有引用。

$$ … $$

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

引用自:https://unix.stackexchange.com/questions/275915