Python检测linux关闭并在关闭之前运行命令
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python检测linux关闭并在关闭之前运行命令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1267字,纯文字阅读大概需要2分钟。
内容图文
![Python检测linux关闭并在关闭之前运行命令](/upload/InfoBanner/zyjiaocheng/965/e132aa8557904eeb9446e768f1f02528.jpg)
是否可以检测并中断linux(Ubuntu 16.04)关机信号(例如电源按钮被点击或电池耗尽).我有一个总是录制视频的python应用程序,我想检测这样的信号,所以我在操作系统关闭之前正确关闭录制.
解决方法:
当linux关闭时,所有进程都会收到SIGTERM,如果它们在超时后不会终止,则会被SIGKILL杀死.您可以使用signal模块实现信号处理程序以正确关闭应用程序. systemd(与早期Ubuntu版本中的暴发户相反)在关机时另外发送SIGHUP.
为了确认这实际上有效,我在两个Ubuntu VM(12.04和16.04)上尝试了以下脚本.在发出SIGKILL之前,系统等待10s(12.04 / upstart)或90s(16.04 / systemd).
该脚本忽略了SIGHUP(否则会以不合理的方式终止该进程)并且会自收到SIGTERM信号到文本文件后不断打印时间.
注意我使用disown(内置bash命令)从终端分离进程.
python signaltest.py &
disown
signaltest.py
import signal
import time
stopped = False
out = open('log.txt', 'w')
def stop(sig, frame):
global stopped
stopped = True
out.write('caught SIGTERM\n')
out.flush()
def ignore(sig, frsma):
out.write('ignoring signal %d\n' % sig)
out.flush()
signal.signal(signal.SIGTERM, stop)
signal.signal(signal.SIGHUP, ignore)
while not stopped:
out.write('running\n')
out.flush()
time.sleep(1)
stop_time = time.time()
while True:
out.write('%.4fs after stop\n' % (time.time() - stop_time))
out.flush()
time.sleep(0.1)
打印到log.txt的最后一行是:
10.1990s after stop
12.04和
90.2448s after stop
为16.04.
内容总结
以上是互联网集市为您收集整理的Python检测linux关闭并在关闭之前运行命令全部内容,希望文章能够帮你解决Python检测linux关闭并在关闭之前运行命令所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。