如何优雅地退出python程序

如何优雅地退出python程序


一个单模的Python程序,启动之后要能够优雅地关闭。即当用户按Ctrl+C或者kill pid的时候,程序都能从容关闭。实现起来非常简单。

[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. is_running = True  
  2.   
  3. def onSigChld(signo, frame):  
  4.     global is_running  
  5.     pid, status = os.waitpid(-1, os.WNOHANG)  
  6.     if pid:  
  7.       is_running = False  
  8.     pass  
  9.   
  10.   
  11. def onSigInt(signo, frame):  
  12.     global is_running  
  13.     is_running = False  
  14.     pass  
  15.   
  16.   
  17. def onSigTerm(signo, frame):  
  18.     global is_running  
  19.     is_running = False  
  20.     pass  
  21.   
  22.   
  23. def test():  
  24.     global is_running  
  25.     while is_running:  
  26.         time.sleep(1)  
  27.         print "."  
  28.     print "App exit gracefully."  
  29.     sys.exit(0)  
  30.     pass  
  31.   
  32.   
  33. if __name__ == "__main__":  
  34.     # 子进程退出后向父进程发送的信号  
  35.     signal.signal(signal.SIGCHLD, onSigChld)  
  36.   
  37.     # 主进程退出信号  
  38.     signal.signal(signal.SIGINT, onSigInt)  
  39.     signal.signal(signal.SIGTERM, onSigTerm)  
  40.   
  41.     test()  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python程序中,可以使用signal模块来处理程序中断信号(例如Ctrl+C)。当程序收到中断信号时,可以执行一些清理操作并优雅退出程序。 以下是一个简单的示例代码,演示如何使用signal模块处理程序中断信号: ```python import signal import time def signal_handler(signal, frame): print('You pressed Ctrl+C!') # 在此处执行清理操作 exit(0) signal.signal(signal.SIGINT, signal_handler) # 模拟程序运行 while True: print('Press Ctrl+C to interrupt...') time.sleep(1) ``` 在上述代码中,我们定义了一个signal_handler函数作为信号处理程序。当程序接收到SIGINT信号(即Ctrl+C)时,signal_handler函数将被调用。在该函数中,我们可以执行一些清理操作并使用exit()函数退出程序。 我们使用signal.signal()函数将SIGINT信号绑定到signal_handler函数。因此,当程序接收到SIGINT信号时,signal_handler函数将被调用。 在主程序中,我们使用while循环模拟程序的运行。在每个迭代中,我们打印一条消息并使用time.sleep()函数等待1秒钟。这使得程序保持运行状态,直到接收到中断信号。 当你运行上述代码时,你可以按下Ctrl+C来发送SIGINT信号。当程序接收到信号时,signal_handler函数将被调用,并打印一条消息。然后,程序将执行清理操作并退出。 这是一个处理程序中断信号的简单示例,你可以根据你的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值