def setup_unix_signals(self): import fcntl read_fd, write_fd = os.pipe() cloexec_flag = getattr(fcntl, 'FD_CLOEXEC', 1) for fd in (read_fd, write_fd): flags = fcntl.fcntl(fd, fcntl.F_GETFD) fcntl.fcntl(fd, fcntl.F_SETFD, flags | cloexec_flag | os.O_NONBLOCK) for sig in (signal.SIGINT, signal.SIGTERM): signal.signal(sig, lambda x, y: None) signal.siginterrupt(sig, False) signal.set_wakeup_fd(write_fd) self.signal_notifier = QSocketNotifier(read_fd, QSocketNotifier.Read, self) self.signal_notifier.setEnabled(True) self.signal_notifier.activated.connect(self.signal_received, type=Qt.QueuedConnection)
def handle_unix_signals(self): if iswindows: # TODO: test this on windows self.signal_read_socket, self.signal_write_socket = socket.socketpair( ) self.signal_read_socket.setblocking(False) self.signal_write_socket.setblocking(False) read_fd, write_fd = self.signal_read_socket.fileno( ), self.signal_write_socket.fileno() else: read_fd, write_fd = os.pipe2(os.O_NONBLOCK | os.O_CLOEXEC) for sig in (signal.SIGINT, signal.SIGTERM): signal.signal(sig, lambda x, y: None) signal.siginterrupt(sig, False) signal.set_wakeup_fd(write_fd) self.signal_notifier = QSocketNotifier(read_fd, QSocketNotifier.Read, self) self.signal_notifier.setEnabled(True) self.signal_notifier.activated.connect(self.signal_received, type=Qt.QueuedConnection)