- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这个问题是that question的扩展.
再一次:我在 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 trace 显示锁在内核中的某处:
0 __kernel_vsyscall
1 __xstat64@GLIBC_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 秒。
所以我有几个问题:
最佳答案
您的问题:“无法访问的网络文件系统”是一个众所周知的示例,它会触发 linux 挂起的任务,这与僵尸进程完全不同(杀死父 PID 是行不通的)任何东西)
一个挂起的任务,是触发系统调用的任务,导致内核出现问题,以至于系统调用永远不会返回。主要的特殊性是调度程序将任务声明为“D”状态,这意味着程序处于不可中断状态。这意味着你无法阻止你的程序:你可以触发任务的所有信号,它不会响应。启动数百个 SIGTERM/SIGKILL 没有任何作用!
我的旧内核就是这种情况:当我的 nfs 服务器崩溃时,我需要重新启动客户端以终止使用文件系统的任务。我很久以前就编译了它(我的硬盘上还有构建树) 并且在配置过程中我在 lib/Kconfig.debug 中看到了这个:
config DETECT_HUNG_TASK
bool "Detect Hung Tasks"
depends on DEBUG_KERNEL
default LOCKUP_DETECTOR
help
Say Y here to enable the kernel to detect "hung tasks",
which are bugs that cause the task to be stuck in
uninterruptible "D" state indefinitiley.
When a hung task is detected, the kernel will print the
current stack trace (which you should report), but the
task will stay in uninterruptible state. If lockdep is
enabled then all held locks will also be reported. This
feature has negligible overhead.
它只是建议在检测时检测这种 tash 或 panic:我没有检查最近的内核是否真的可以解决问题(你的问题似乎是这样),但我认为不值得启用它。
还有第二个问题:通常情况下,检测会在 120 秒后发生,但我还看到了一个 Konfig 选项:
config DEFAULT_HUNG_TASK_TIMEOUT
int "Default timeout for hung task detection (in seconds)"
depends on DETECT_HUNG_TASK
default 120
help
This option controls the default timeout (in seconds) used
to determine when a task has become non-responsive and should
be considered hung.
It can be adjusted at runtime via the kernel.hung_task_timeout_secs
sysctl or by writing a value to
/proc/sys/kernel/hung_task_timeout_secs.
A timeout of 0 disables the check. The default is two minutes.
Keeping the default should be fine in most cases.
这也适用于内核线程:示例:为 fuse 文件系统上的文件创建一个循环设备。然后让控制 fuse 文件系统的用户空间程序崩溃!您应该得到一个 Ktread,其名称的形式为 loopX(X 通常对应于您的环回设备编号)HUNGing!
网页链接:
https://unix.stackexchange.com/questions/5642/what-if-kill-9-does-not-work (看ultrasawblade写的答案)
http://www.linuxquestions.org/questions/linux-general-1/kill-a-hung-task-when-kill-9-doesn 't-help-697305/
http://forums-web2.gentoo.org/viewtopic-t-811557-start-0.html
http://comments.gmane.org/gmane.linux.kernel/1189978
http://comments.gmane.org/gmane.linux.kernel.cifs/7674 (这个和你的情况类似)
对于您的三个问题:您有答案:这可能是由于 vfs linux 内核层中一个众所周知的错误造成的! (没有 CIFS 超时)
关于centos - 尝试访问安装有 CIFS 的远程文件夹在断开连接时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085868/
我正在使用 CentOS 6 机器。我尝试遵循以下指南: How to open port in centOS http://ask.xmodulo.com/open-port-firewall-ce
我正在为 CentOS 7 创建一个脚本,但我正在努力根据变量连接值,这与我工作的其他发行版不同。例如,在下面的代码中: DIR_BKP=/tmp/_bkp_local PATH_LOG=$DIR_B
我从以下位置下载了文件: https://github.com/christiangalsterer/httpbeat/releaseshttpbeat-4.0.0-x86_64.rpm 并尝试通过以
我想在我的 Centos 8 中使用命令 mkimage。 我尝试使用命令 dnf install uboot-tools 以 root 身份安装 uboot-tools 但这不可用。 谁能指导我如何
我有一个 Centos 服务器。 结果 $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) 和 $ yum list i
我在CentOs7 上安装Gitlab 后遇到了麻烦。我第一次被重定向到管理员密码创建页面,在输入管理员用户密码后,服务器发送错误。 422 The change you requested was
因此,我正在尝试从我的一个运行 centos 的邮箱中发送电子邮件,并且我已经安装并打开了 sendmail,但是发送一封电子邮件实际上需要几分钟时间。电子邮件不是应该几乎是即时的吗? 这是我的/et
我正在尝试在虚拟 Centos 7 发行版上构建一些 C++ 库。由于我还没有发现这个操作系统看不到/usr/local/lib 或/usr/local/lib64 的原因,这些库安装在其他 linu
我正在尝试通过以下网址在我的服务器(centos 7.1 minimal)上安装 imagemagick: imagemagick installation steps 在第 1 步得到这个错误: L
当我尝试安装 rpmforge(我需要安装 phpmyadmin)时出现此错误,将不胜感激任何帮助! [root@plasticarmy ~]# yum http://pkgs.repoforge.o
我需要安装一个centos 5 repo 来在centos 7 机器上下载用于el5 的dhclient,以便在centos 5 机器上传输dhclient rpms。有可能的 ? 谢谢! 最佳答案
我正在开发一个可以在 CentOS 8 和 CentOS 7 系统上运行的程序。在其中,我使用 gethostbyname 将 DNS 名称解析为 IP 地址。 为了尝试使代码可移植,我正在使用以下命
我想在 CentOS7(或 CentOS6)上安装 cgal 模块。它需要 pgrouting 才能使用 PostGIS。 我一直用 CGAL Manual Installation 安装 cgal
我在 CentOS 平台上使用 R/RStudio。我需要查看二进制日志文件(/var/log/messages)是否包含有关图形设备绘图问题的更多信息,但我无法从 RStudio 中读取它。 我在社
我正在尝试在我的 CentOS 上本地安装 Kubernetes。我正在关注这个博客 http://containertutorials.com/get_started_kubernetes/inde
来自 http://kubernetes.io/docs/getting-started-guides/kubeadm/ CentOS Linux 版本 7.2.1511(核心) (1/4) 在主机上
使用tcpdump监控网络流量时,发现很多dns反向查询记录。 像这样: A_IP.55276 > DNS_IP.domain: 9247+ PTR?查询 IP.in-addr.arpa。 (45)
我正在尝试在 CentOS 6.7 和 ./configure --prefix=$HOME/local 上安装 mutt运行良好,但在 make install步骤,我在下面遇到了这个错误,我不知道
如何在 CENTOS 中删除所有以 *0x0.jpg 结尾的文件?我需要删除嵌套在文件夹和子文件夹中的多个文件 最佳答案 我假设你有一个外壳 - 试试 find /mydirectory -type
我需要检索安装在我的 Linux (Centos) 主机上的所有软件包的软件包版本。 rpm -qa 给了我所有已安装软件包的列表。 我知道 rpm -qi "package name"给了我包信息。
我是一名优秀的程序员,十分优秀!