我试图关闭我的电脑并在局域网上重新启动它。
获取其中一个命令(关闭或重启)时,我执行以下操作之一:
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自己购买那些额外的几秒钟来获取消息。