通过子进程关闭 PC 后会发生什么?

What happens after shutting down the PC via subprocess?

我尝试关闭我的电脑并在 LAN 上重新启动它。

当收到命令之一(关闭或重启)时,我执行以下操作之一:

subprocess.call(["shutdown", "-f", "-s", "-y"]) # Turn off

subprocess.call(["shutdown", "-f", "-r", "-t", "-c", "-y"]) # Restart

我想通知对方进程是否成功启动,PC是否处于所需状态。

我知道可以实现一个函数,在执行命令几秒后检查 PC 是否还活着(这是一个很好的主意),但是怎么知道需要多少秒呢?如果 PC 在发送一条消息说它还活着后片刻就关机了怎么办?

我很想知道 - 执行这些命令后究竟发生了什么?脚本会一直保持 运行 直到任务管理器终止它吗?它会在命令后立即停止 运行 吗?

shutdown这样的程序只是向init(或任何现代替代品)发送一条消息并立即退出;接下来会发生什么取决于它。典型的 Unix 行为是首先关闭诸如 SSH 服务器之类的东西(这可能不会终止你与机器的连接),然后将 SIGTERM 发送到所有进程,等待几秒钟(通常为 5 秒)让信号处理程序到达 运行,然后向所有幸存者发送 SIGKILL。最后,文件系统被卸载,硬件停止或重启。

虽然不能保证第一阶段需要足够长的时间让您报告 shutdown 执行成功,但通常会;如果担心,您可以抓住 SIGTERM 为自己争取额外的几秒钟来发送消息。