Bash脚本执行Deep Suspend/Resume卡顿,终端执行正常求助
解决脚本执行深度挂起卡顿但终端直接执行正常的问题
从日志对比能明显看到:脚本执行时系统挂起流程卡在OOM killer disabled步骤,而终端直接执行可完整完成剩余任务冻结、设备挂起/恢复全流程。核心差异在于脚本作为独立进程运行时,可能持有终端相关资源或处于特定进程组,导致内核无法顺利完成用户进程冻结流程。
以下是具体解决建议:
方案1:重定向脚本所有输入输出
修改脚本,断开与终端的IO关联,避免终端资源阻塞挂起流程:
#!/bin/bash # 设置RTC唤醒闹钟(建议>前加空格,避免解析歧义) echo +30 > /sys/class/rtc/rtc0/wakealarm # 关闭标准输入,重定向输出/错误到空设备 exec 0>&- 1>/dev/null 2>&1 # 触发深度挂起 echo "mem" > /sys/power/state
方案2:脱离终端运行脚本
无需修改脚本,直接用工具让脚本脱离终端会话执行:
# 方法1:用setsid完全脱离终端 setsid ./sus-res.sh # 方法2:用nohup后台运行(会生成nohup.out日志文件) nohup ./sus-res.sh &
方案3:以系统服务方式运行
利用systemd-run将脚本作为临时系统服务运行,完全脱离用户终端环境:
systemd-run --unit=suspend-task ./sus-res.sh
额外检查点
- 确保脚本拥有执行权限:执行
chmod +x sus-res.sh; - 确认以root身份执行脚本,保证对
/sys/class/rtc/rtc0/wakealarm和/sys/power/state的读写权限。
内容的提问来源于stack exchange,提问作者Jaff_NL
相关产品推荐
相关产品推荐

