Python signal.SIGTTOU Examples

The following are 9 code examples of signal.SIGTTOU(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module signal , or try the search function .
Example #1
Source File: __init__.py    From service with MIT License 6 votes vote down vote up
def __init__(self, name, pid_dir='/var/run', signals=None):
        """
        Constructor.

        ``name`` is a string that identifies the daemon. The name is
        used for the name of the daemon process, the PID file and for
        the messages to syslog.

        ``pid_dir`` is the directory in which the PID file is stored.

        ``signals`` list of operating signals, that should be available
        for use with :py:meth:`.send_signal`, :py:meth:`.got_signal`,
        :py:meth:`.wait_for_signal`, and :py:meth:`.check_signal`. Note
        that SIGTERM is always supported, and that SIGTTIN, SIGTTOU, and
        SIGTSTP are never supported.
        """
        self.name = name
        self.pid_file = _PIDFile(os.path.join(pid_dir, name + '.pid'))
        self._signal_events = {int(s): threading.Event()
                               for s in ((signals or []) + [signal.SIGTERM])}
        self.logger = logging.getLogger(name)
        if not self.logger.handlers:
            self.logger.addHandler(logging.NullHandler())
        self.files_preserve = [] 
Example #2
Source File: daemon.py    From luscan-devel with GNU General Public License v2.0 6 votes vote down vote up
def make_default_signal_map():
    """ Make the default signal map for this system.

        The signals available differ by system. The map will not
        contain any signals not defined on the running system.

        """
    name_map = {
        'SIGTSTP': None,
        'SIGTTIN': None,
        'SIGTTOU': None,
        'SIGTERM': 'terminate',
        }
    signal_map = dict(
        (getattr(signal, name), target)
        for (name, target) in name_map.items()
        if hasattr(signal, name))

    return signal_map 
Example #3
Source File: daemon.py    From virt-who with GNU General Public License v2.0 6 votes vote down vote up
def make_default_signal_map():
    """ Make the default signal map for this system.

        The signals available differ by system. The map will not
        contain any signals not defined on the running system.

        """
    name_map = {
        'SIGTSTP': None,
        'SIGTTIN': None,
        'SIGTTOU': None,
        'SIGTERM': 'terminate',
    }
    signal_map = dict(
        (getattr(signal, name), target)
        for (name, target) in name_map.items()
        if hasattr(signal, name))

    return signal_map 
Example #4
Source File: Executer.py    From afl-crash-analyzer with GNU General Public License v3.0 6 votes vote down vote up
def _handle_sigttou(self, signum, frame):
        #Had some issues that when memory corruptions occured in a subprocess
        #(no matter if shielded by multiprocess and subprocess module), 
        #that a SIGTTOU was sent to the entire Python main process.
        #According to https://en.wikipedia.org/wiki/SIGTTOU this
        #results in the process being stopped (and it looks like SIGSTP on the cmd):
        #[1]+  Stopped                 ./AflCrashAnalyzer.py
        #Of course we don't want that. Debugging was hard but then
        #realized after this program was stopped:
        #$ echo $?
        #150
        #So that's SIGTTOU on Linux at least.
        #This handler will prevent the process to stop.
        self.sigttou_flag = True
        try:
            self.current_process.kill()
        except OSError as ose:
            Logger.info("Kill failed. Sometimes the process exactly exits before we try to kill it... coward. Nothing to worry about.", ose) 
Example #5
Source File: proxies_signals_test.py    From dumb-init with MIT License 6 votes vote down vote up
def test_default_rewrites_can_be_overriden_with_setsid_enabled():
    """In setsid mode, dumb-init should allow overwriting the default
    rewrites (but still suspend itself).
    """
    rewrite_map = {
        signal.SIGTTIN: signal.SIGTERM,
        signal.SIGTTOU: signal.SIGINT,
        signal.SIGTSTP: signal.SIGHUP,
    }
    with print_signals(_rewrite_map_to_args(rewrite_map)) as (proc, _):
        for send, expect_receive in rewrite_map.items():
            assert process_state(proc.pid) in ['running', 'sleeping']
            proc.send_signal(send)

            assert proc.stdout.readline() == '{}\n'.format(expect_receive).encode('ascii')
            os.waitpid(proc.pid, os.WUNTRACED)
            assert process_state(proc.pid) == 'stopped'

            proc.send_signal(signal.SIGCONT)
            assert proc.stdout.readline() == '{}\n'.format(signal.SIGCONT).encode('ascii')
            assert process_state(proc.pid) in ['running', 'sleeping'] 
Example #6
Source File: webserver_command.py    From airflow with Apache License 2.0 5 votes vote down vote up
def _kill_old_workers(self, count: int) -> None:
        """
        Send signal to kill the worker.

        :param count: The number of workers to kill
        """
        for _ in range(count):
            count -= 1
            # TTOU: Decrement the number of processes by one
            self.gunicorn_master_proc.send_signal(signal.SIGTTOU)
            self._wait_until_true(
                lambda: self.num_workers_expected + count == self._get_num_workers_running(),
                timeout=self.master_timeout) 
Example #7
Source File: ptrace.py    From ptracer with Apache License 2.0 5 votes vote down vote up
def is_stop_signal(signum):
    return signum in (signal.SIGSTOP, signal.SIGTSTP,
                      signal.SIGTTIN, signal.SIGTTOU) 
Example #8
Source File: signal.py    From huskar with MIT License 5 votes vote down vote up
def _stop_backdoor_server(signum, frame):
    def _stop():
        server = ServeBackdoor.get_instance()
        if server:
            logger.info('stopping backdoor server on %r...', server.addr)
            server.kill()

    ignore_sig(signal.SIGTTOU)
    gevent.spawn(_stop()) 
Example #9
Source File: Executer.py    From afl-crash-analyzer with GNU General Public License v3.0 5 votes vote down vote up
def run_command(self, command, timeout=None, env={}, stdout=file("/dev/null"), stderr=file("/dev/null")):
        #TODO: make stdout / stderr configurable
        if not timeout:
            timeout = self.config.run_timeout
        process = subprocess.Popen(command, stdin=None, shell=False, stdout=stdout, stderr=stderr)
        self.current_process = process
        signal.signal(signal.SIGALRM, self._handle_alarm)
        #We also had a problem that memory corruptions...
        signal.signal(signal.SIGTTOU, self._handle_sigttou)
        signal.alarm(timeout)
        self.timeout_flag = False
        self.sigttou_flag = False
        #TODO: get rid of magic number
        ret_signal = self.TIMEOUT_SIGNAL
        #blocking call:
        process.communicate()
        signal.alarm(0)
        #This line is reached when timeout_flag was set by _handle_alarm if it was called
        if self.timeout_flag:
            Logger.debug("Process was killed as it exceeded the time limit", debug_level=3)
            ret_signal = self.TIMEOUT_SIGNAL
        elif self.sigttou_flag:
            Logger.debug("Some memory corruption resulted in a SIGTTOU signal being thrown (usually stops process). We caught it.", debug_level=3)
            ret_signal = signal.SIGTTOU
        else:
            ret_signal = process.returncode
        return ret_signal