在Linux系统中,信号是一种进程间通信(IPC)机制,用于通知接收进程某个事件已经发生。Python通过signal
模块提供了对信号的支持,允许Python程序捕获和处理这些信号。
Linux系统定义了多种信号,常见的包括:
SIGINT
:用户中断,通常由Ctrl+C触发。SIGTERM
:请求终止进程,进程可以做一些清理工作然后退出。SIGKILL
:强制终止进程,进程无法忽略此信号。SIGALRM
:定时器信号,用于实现定时任务。SIGALRM
实现定时操作或超时控制。以下是一个简单的Python示例,展示了如何捕获和处理SIGINT
信号:
import signal
import time
def handle_sigint(signum, frame):
print("接收到中断信号,准备退出...")
# 在这里添加清理代码
exit(0)
# 注册信号处理函数
signal.signal(signal.SIGINT, handle_sigint)
print("程序正在运行,按Ctrl+C退出...")
while True:
time.sleep(1)
原因:
解决方法:
signal.siginterrupt()
函数来控制是否允许信号中断系统调用。import signal
import time
import os
def handle_sigint(signum, frame):
print("接收到中断信号,准备退出...")
# 在这里添加清理代码
exit(0)
# 禁止信号中断系统调用
signal.siginterrupt(signal.SIGINT, False)
# 注册信号处理函数
signal.signal(signal.SIGINT, handle_sigint)
print("程序正在运行,按Ctrl+C退出...")
while True:
time.sleep(1)
# 模拟一些工作负载
os.system("sleep 1")
通过上述方法,可以确保信号处理函数能够在接收到相应信号时正确执行。
领取专属 10元无门槛券
手把手带您无忧上云