我想知道Linux最新内核中的open()系统调用是否会阻塞文件系统是作为远程设备挂载的,例如CEPH文件系统还是NFS,并且存在某种类型的网络故障? / p>
答案 0 :(得分:2)
是的,如果某种网络出现故障,尝试在远程文件系统上打开文件时,open()
调用可能会阻塞。
根据远程文件系统的挂载方式,可能需要很长时间(多秒)才能确定远程文件系统不可用,并且在看似过多的时间后返回失败,或者可能只是无限期锁定,直到远程资源再次可用(或直到从系统中删除映射)。
答案 1 :(得分:2)
是。多长时间取决于上行链路的速度(和状态),但您的进程或线程将阻塞,直到远程操作完成。 NFS有点臭名昭着,有些FUSE文件系统会处理阻止任何文件处理的内容,但是你会阻止open()
,read()
和write()
,经常受到限制网络和其他系统。
不要使用O_NONBLOCK
来绕过它,或者你可能正在读取或写入黑洞(无论如何都会阻止它)。