def close(self):
        """ Reassert control of tty.  Closing stdin, stderr, and and stdout
            will get rid of the last pointer to the slave fd of the pseudo
            tty, which should cause the logging process to stop.  We wait
            for it to die before continuing
        """
        if not self.logging:
            return
        self.closed = True
        # restore old terminal settings before quitting
        if self.oldStdin != 0:
            os.dup2(self.oldStdin, 0)
        os.dup2(self.oldStdout, 1)
        os.dup2(self.oldStderr, 2)
        if self.oldTermios is not None:
            termios.tcsetattr(0, termios.TCSADRAIN, self.oldTermios)
        if self.oldStdin != 0:
            os.close(self.oldStdin)
        os.close(self.oldStdout)
        os.close(self.oldStderr)
        try:
            # control stdin -- if stdin is a tty
            # that can be controlled
            if sys.stdin.isatty() and self.restoreTerminalControl:
                os.tcsetpgrp(0, os.getpgrp())
        except __HOLE__:
            # stdin might not even have an isatty method
            pass

        # Wait for child logging process to die.  Send successively ruder
        # signals if it does not do so within a reasonable time.  The primary
        # reason that it would not die immediately is that a process has forked
        # while holding the TTY file descriptor, and thus the logger is still
        # polling it for output.
        signals = [signal.SIGTERM, signal.SIGKILL]
        while signals:
            start = time.time()
            while time.time() - start < 10:
                pid, status = os.waitpid(self.loggerPid, os.WNOHANG)
                if pid:
                    break
                time.sleep(0.1)
            else:
                # Child process did not die.
                signum = signals.pop(0)
                os.kill(self.loggerPid, signum)
                continue
            break
        else:
            # Last signal was a KILL, so wait indefinitely.
            os.waitpid(self.loggerPid, 0)
dataset/ETHPy150Open sassoftware/conary/conary/lib/logger.py/Logger.close