这个问题是延期这个问题.
再说一遍:我在CentOS 6.0下工作,我有一个远程win7文件夹,安装有:
mount -t cifs //PC128/mnt /media/net -o "username=WORKGROUP\user,password=pwd,rw,noexec,soft,uid=user,gid=user"
Run Code Online (Sandbox Code Playgroud)
当远程文件夹不可用时(例如,拉出网络电缆),尝试访问远程文件夹会锁定我正在处理的应用程序.起初我检测到QDir :: exists()导致锁定20-90秒(我仍然无法找出为什么会出现这种差异),进一步我发现任何对stat()函数的调用都会导致应用程序锁定.
我按照上面的主题提供的建议,我将QDir :: exists()调用(以及稍后 - 调用stat()函数)移动到另一个线程,这并没有解决问题.当连接突然丢失时,应用程序仍然挂起.Qt trace显示锁在内核中的某个位置:
0 __kernel_vsyscall
1 __xstat64@GLIBC_2.1 /lib/libc.so.6
2 QFSFileEnginePrivate::doStat stat.h
Run Code Online (Sandbox Code Playgroud)
在尝试访问文件夹本身之前,我还尝试检查是否仍然挂载了远程共享,但它没有帮助.方法如:
mount | grep /media/net
Run Code Online (Sandbox Code Playgroud)
显示即使没有与网络的活动连接,仍然会挂载共享文件夹.
检查文件夹状态差异,例如:
stat -fc%t:%T /media/net/ != stat -fc%t:%T /media/net/..
Run Code Online (Sandbox Code Playgroud)
也挂了~20秒.
所以我有几个问题: