在玩《文明 5》(最近)和其他游戏和应用程序(很久以前)时,偶尔会有一个无法退出,导致我不得不强制重启电脑。
玩了一会儿后,游戏有时会锁定。(我无法退出游戏,也无法使用键盘或鼠标与游戏进行任何交互,尽管我可以移动鼠标指针。)然后我从另一台 Mac ssh 进入以终止游戏,并向kill -9
游戏的 PID 发出一个。然后我ps
再次运行以查看它是否被终止(游戏仍显示在我的笔记本电脑屏幕上),我看到以下内容:
PID TT STAT TIME COMMAND
468 ?? ?E 0:00.00 (Civilization V)
从ps
手册页中,我看到状态栏中的“E”表示进程正在退出。五分钟(或大约五分钟)后,游戏仍然占据屏幕,冻结,即使进程已经消失。然后我杀死(每次 -9)所有其他相关的 steam 进程,然后(绝望地)杀死SystemUIServer
Dock 以尝试启动某些东西,然后loginwindow
强制注销。这些都不起作用,所以我发出了一个sudo shutdown -r now
。十五分钟后,它还没有重新启动,Civ V 仍然冻结在我的屏幕上,我无法 ssh 进入受影响的系统(可能是因为关机已停止 sshd)。
我真的不想多次硬重启我的电脑;有人知道如何真正杀死 Civ 吗?
顺便提一下,我在 i7 MacBook Air 上运行的是 OS X Lion(最新版本)。
编辑:我读过另一个半相关的问题,但终止父进程也不起作用。
答案1
无法终止的进程通常是由以下两种情况之一引起的:要么是进程正在被调试器跟踪,要么(更常见的情况)是进程对某个卡住的设备有待处理的 I/O 请求。在后一种情况下,罪魁祸首通常是磁盘设备抛出硬读/写错误或已静音,而内核尚未放弃它。但它可能是任何连接到系统总线的东西都出现了问题。
对于 USB 和 FireWire 设备,断开外围设备与系统的连接通常可以清除卡住的进程。但如果卡住的设备是视频卡或其他非热插拔设备,则重新启动是清除进程的唯一选择。
答案2
我们最近观察到了类似的行为,这是由于系统运行中 mbuf 不足造成的。您可以使用“netstat -m”命令检查是否发生了这种情况。如果延迟分配的数量不为零,则表示存在短缺可能已经造成了问题。
当我们在系统中用完 mbuf 时,我们运行了一个多线程程序,该程序在 UNIX 域套接字和 TCP 连接上的写入速度比另一端所能承受的速度快得多,希望将流量控制到合理的水平。当 mbuf 池耗尽时,它通常运行 60-80 个线程(在 Snow Leopard 和 Lion 上都是如此)。经过多次这样的运行,我们发现 Safari 或 Mail 等进程无法通过正常的退出或终止来终止,因此必须重新启动。