Giả sử chúng ta có một daemon tầm thường như vậy được viết bằng python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
và chúng tôi daemonize nó bằng cách sử dụng start-stop-daemon
mà theo mặc định gửi tín hiệu SIGTERM
( TERM
) --stop
.
Hãy giả sử bước hiện tại được thực hiện là #2
. Và tại thời điểm này, chúng tôi đang gửi TERM
tín hiệu.
Điều gì xảy ra là việc thực thi chấm dứt ngay lập tức.
Tôi thấy rằng tôi có thể xử lý sự kiện tín hiệu bằng cách sử dụng signal.signal(signal.SIGTERM, handler)
nhưng điều này là nó vẫn làm gián đoạn quá trình thực thi hiện tại và chuyển điều khiển sang handler
.
Vì vậy, câu hỏi của tôi là - có thể không làm gián đoạn việc thực hiện hiện tại mà xử lý TERM
tín hiệu trong một luồng riêng biệt (?) Để tôi có thể đặt shutdown_flag = True
sao cho mainloop()
có cơ hội dừng lại một cách duyên dáng?
signalfd
và mặt nạ ra giaoSIGTERM
cho quá trình này.