'da çalışıyorsa, sinyalleri işlemez. Standart kitaplık ile oynarken, python2 ve python3 arasında garip bir fark buldum. TCPServer farklı bir iş parçacığında çalışırken python2'de bir sinyal yakalamaya çalışırsam, sinyal işlenmez, ancak python3'te olmaz. "^ C"Python 2, TCPServer başka bir iş parçacığı
Starting server thread
Waiting for server thread to shut down
^CKilled
: Burada
Bu python3 çıktısı olanimport signal
import threading
import sys
if sys.version_info > (3,0):
from socketserver import TCPServer, BaseRequestHandler
else:
from SocketServer import TCPServer, BaseRequestHandler
def shutdown(signum, frame):
print("Shutting down server thread")
server.shutdown()
server = TCPServer(
('127.0.0.1', 7654),
BaseRequestHandler
)
signal.signal(signal.SIGTERM, shutdown)
signal.signal(signal.SIGINT, shutdown)
server_thread = threading.Thread(target=server.serve_forever)
print("Starting server thread")
server_thread.start()
print("Waiting for server thread to shut down")
server_thread.join()
print("Server thread terminated")
sorunu yeniden üreten bir script:
Starting server thread
Waiting for server thread to shut down
^CShutting down server thread
Server thread terminated
Ve bu python2 dan Bir klavye kesmesi ve "Killed" bir sürece gönderdiğim sigkill.
Kapatma neden çağrılmadı?
nasıl sürecine SIG_INT sinyal göndermek mi? – Tisho
@ POSIX sistemlerinde Tisho, Control-C aktif programın bir SIGINT sinyali almasına neden olur. [wiki] (http://en.wikipedia.org/wiki/Control-C#In_command-line_environments) – Blin
Tamam, en azından SIGKILL sinyalinin çalıştığını biliyoruz. SIGKILL'i kapatmaya bağlarsanız, işe yarayacak mı? – Tisho