此問題是that question的擴展。嘗試訪問通過CIFS掛接的遠程文件夾掛起時掛起
再一次:我的CentOS 6.0下工作,我有一個遠程win7的文件夾,安裝有:
mount -t cifs //PC128/mnt /media/net -o "username=WORKGROUP\user,password=pwd,rw,noexec,soft,uid=user,gid=user"
當遠程文件夾不可用(例如,網絡電纜被拔出)試圖訪問遠程文件夾鎖定了我正在處理的應用程序。起初我檢測到QDir :: exists()導致鎖定20-90秒(我仍然無法找出爲什麼這樣的區別),進一步我發現任何對stat()函數的調用都會導致應用程序鎖定。
我遵循上述主題提供的建議,我將QDir :: exists()調用(以及後來的 - 調用stat()函數)移至另一個線程,但這並未解決問題。連接突然丟失時,應用程序仍然掛起。 Qt的跟蹤顯示鎖在內核某處:
0 __kernel_vsyscall
1 [email protected]_2.1 /lib/libc.so.6
2 QFSFileEnginePrivate::doStat stat.h
我確實也試圖檢查遠程份額仍在安裝嘗試訪問文件夾本身之前,但它並沒有幫助。的方法,例如:
mount | grep /media/net
表明共享文件夾仍然安裝甚至是不存在對網絡沒有活動連接。
檢查文件夾的狀態的差異,例如:
stat -fc%t:%T /media/net/ != stat -fc%t:%T /media/net/..
也掛起〜20秒。
所以我有幾個問題:
- 有沒有什麼辦法改變CIFS超時?我確實試圖找出,但似乎沒有合適的參數和CIFS配置。
- 如何檢查遠程文件夾是否仍然安裝並且未被鎖定?
- 我該如何檢查文件夾是否存在並且不會被鎖定?
我到目前爲止唯一的非懸掛解決方案是在嘗試訪問掛載的共享文件夾之前ping遠程主機。它可以工作,但它不是一個完美的解決方案。 –