当某些进程阻止系统挂起时,通常会发生这种情况。
做
dmesg -T|grep Freez -A4
Run Code Online (Sandbox Code Playgroud)
并查找这些条目:
--
[sun mar 3 15:19:48 2013] Freezing user space processes ...
[sun mar 3 15:20:08 2013] Freezing of tasks failed after 20.01 seconds (3 tasks refusing to freeze, wq_busy=0):
[sun mar 3 15:20:08 2013] mount.nfs D e8631aa0 0 5518 5517 0x00800004
[sun mar 3 15:20:08 2013] e8631b10 00000086 f7bc0e00 e8631aa0 c1053cb4 c1809020 c192ee00 c192ee00
--
Run Code Online (Sandbox Code Playgroud)
检查时间戳以查看报告的哪些问题与您的尝试挂起相关。在这种情况下,正是它mount.nfs造成了问题。
现在,将脚本放入 中/etc/pm/sleep.d/,其中的脚本将在挂起和恢复时运行。文件名应以订购号开头,对于用户脚本来说是 00-49(有关更多详细信息,请参阅man pm-suspend)。
脚本可能看起来像这样
#!/bin/sh
(killall -1 mount.nfs; exit 0)
Run Code Online (Sandbox Code Playgroud)
以及引起问题的其他进程的相应条目(如果有)。
括号 和exit 0是一个技巧:如果没有找到进程,killall将以退出代码 1 退出,这将取消整个挂起。killall上面的代码将在一个子 shell 中运行,该子 shell 将以 0 退出。
如果您遇到问题,请检查/var/log/pm-suspend.log是否会记录暂停和运行脚本的尝试。