17 from threading
import currentThread
25 from java.lang
import IllegalArgumentException
27 IllegalArgumentException = ValueError
40 LOGGER.info(
'Received signal: %s.' % signum)
42 sys.__stderr__.write(
'Execution forcefully stopped.\n')
44 sys.__stderr__.write(
'Second signal will force exit.\n')
53 self.
_orig_sigint_orig_sigint = signal.getsignal(signal.SIGINT)
54 self.
_orig_sigterm_orig_sigterm = signal.getsignal(signal.SIGTERM)
55 for signum
in signal.SIGINT, signal.SIGTERM:
61 signal.signal(signal.SIGINT, self.
_orig_sigint_orig_sigint
or signal.SIG_DFL)
62 signal.signal(signal.SIGTERM, self.
_orig_sigterm_orig_sigterm
or signal.SIG_DFL)
65 _can_register_signal = property
68 return signal
and currentThread().getName() ==
'MainThread'
72 signal.signal(signum, self)
73 except (ValueError, IllegalArgumentException)
as err:
78 name, ctrlc = {signal.SIGINT: (
'INT',
'or with Ctrl-C '),
79 signal.SIGTERM: (
'TERM',
'')}[signum]
80 LOGGER.warn(
'Registering signal %s failed. Stopping execution '
81 'gracefully with this signal %sis not possible. '
82 'Original error was: %s' % (name, ctrlc, err))
Used for communicating failures in test execution.
def _register_signal_handler(self, signum)
def start_running_keyword(self, in_teardown)
def __call__(self, signum, frame)
def _can_register_signal(self)
def _warn_about_registeration_error(self, signum, err)
def __exit__(self, *exc_info)
def stop_running_keyword(self)
def _stop_execution_gracefully(self)