Command-Line
“ls”命令在試圖列出一個陳舊的掛載點時卡住了。你如何殺死/阻止它?
在使用遠端文件系統(例如
sshfs
或smbfs
)時,文件系統可能會由於網路問題而變得陳舊。為了檢查掛載是否過時,我通常使用命令ls
查看是否可以列出遠端掛載的內容。當這些遠端掛載過時時,該ls
命令會等待很長時間,直到幾分鐘後輸出類似於以下內容的內容:ls: cannot access '/mnt/remote': Input/output error
有沒有辦法從同一個 bash 會話
ls
中停止命令,而不是等待這個錯誤?正常的 Control+C 似乎無法完成這項工作。關閉 bash shell 是可行的,但這是不可取的。有什麼選擇嗎?
不,因為
ls
(或任何其他文件操作程序)處於程序狀態“不間斷睡眠”,所以沒有什麼可以中斷它,甚至SIGKILL
不能。也許您可以在掛載遠端文件系統時降低超時值。
sshfs
有ServerAliveInterval
和ServerAliveCountMax
。
不要試圖殺死
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