如果 Mac 已进入倒计时关机状态,请立即在终端输入sudo shutdown -c取消计划关机;成功后会显示“Shutdown cancelled”。若系统中还存在pmset创建的重复关机任务,则还需要继续执行sudo pmset repeat cancel进行清除。

当Mac因为Python脚本执行了os.system("sudo shutdown -h +10")或subprocess.run(["sudo", "shutdown", "-h", "+5"])这类命令后,系统就会启动倒计时自动关机模式。遇到这种情况,应尽快取消该关机计划,否则当剩余时间结束时,macOS会自动执行关机,无法在最后一刻阻止。
用终端命令快速取消Python触发的Mac关机任务
这一步非常直接,只需要在终端输入一条命令,就可以撤销已经提交的关机指令。
打开“终端”(路径为“应用程序→实用工具”),输入:sudo shutdown -c,然后按下回车键。
系统会提示你输入管理员密码。需要注意的是,输入密码时屏幕不会显示字符或星号,这是macOS终端的正常安全机制,输入完成后直接回车即可。
命令执行成功后,终端通常会返回“Shutdown cancelled”提示,同时右上角的关机倒计时通知也会消失,说明原来的定时关机任务已经被成功取消。
检查并删除可能残留的pmset重复关机计划
部分Python脚本不仅会调用临时关机命令,还可能通过subprocess.run(["sudo", "pmset", "repeat", "shutdown", "at", "23:00"])创建持续生效的定时关机任务。这类任务不会被shutdown -c一并清除,因此需要单独检查和处理。
先在终端中运行:pmset -g sched,查看当前调度列表中是否存在类似shutdown at的计划项目。
如果确实存在,说明后台还有持久化的自动关机任务在生效,需要手动执行:sudo pmset repeat cancel,然后按回车并输入管理员密码确认。
完成后再次运行pmset -g sched,如果输出为空,或者只显示“Scheduled power events:”,就表示所有重复关机计划都已经清除干净。
定位并终止正在运行的关机相关Python脚本进程
第一步:先确认触发关机的Python脚本是否仍在后台运行。打开终端后执行:ps aux | grep -E ".py|shutdown" | grep -v grep。
第二步:在输出结果中查找包含shutdown参数,或明显带有关机逻辑的Python进程,记下最左侧显示的PID进程号(例如82417)。
第三步:输入kill 82417终止该进程;如果进程没有退出,再使用kill -9 82417进行强制结束。-9信号无法被捕获或忽略,会立即终止进程,但也可能让脚本尚未执行完的清理步骤直接中断。
第四步:为了避免遗漏其他相关实例,可以再执行一次killall -q python3 python,静默结束当前用户环境下所有Python解释器进程。
排查并禁用Python脚本中的自动关机逻辑
方法一:检查你最近运行过的.py脚本文件
使用文本编辑器打开可疑脚本(例如auto_shutdown.py、cleaner.py),搜索这些关键词:shutdown、subprocess、os.system、os.popen。找到调用系统关机命令的位置后,直接注释掉或删除对应代码行。
方法二:检查LaunchAgents中由Python启动的守护任务
按Shift + Command + G打开访达路径:~/Library/LaunchAgents/,查找文件名中包含shutdown、poweroff、auto,或与你脚本名称相关缩写的.plist文件,确认可疑后可直接移到废纸篓。
方法三:禁用可疑自动化工具中的关机配置
如果你曾通过Homebrew安装自动化工具(如watchexec、entr并配合关机命令使用),或通过pip install安装第三方调度库(例如schedule、APScheduler),那么还应检查相关配置文件或启动脚本中是否嵌入了自动关机动作;如果有,就应及时关闭或删除对应设置。
