我设置signal.setitimer,然后使用os.system()启动一个阻塞命令,想在5s后退出,但是失败了,什么原因?

发布于 2022-09-07 22:16:03 字数 1352 浏览 35 评论 0

我使用了定时器signal.setitimer,想要在5s后退出程序,但是没有成功

这是我的代码:

from signal import setitimer, signal, SIGALRM, ITIMER_REAL, SIGKILL
import os

if __name__ == '__main__':
    def _exit(*args):
        print('Timeout & Exit!!!')
        os.kill(os.getpid(), SIGKILL)
    signal(SIGALRM, _exit)
    setitimer(ITIMER_REAL, 5)
    os.system('ping 127.0.0.1')
    setitimer(ITIMER_REAL, 0)
    

这是运行的结果:
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.017 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.010 ms
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.012 ms
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=11 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=12 ttl=64 time=0.011 ms
64 bytes from 127.0.0.1: icmp_seq=13 ttl=64 time=0.011 ms

如果我将os.system('ping 127.0.0.1')替换成while True:pass, 程序会在5s后自动退出,谁能帮忙解释下呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文