def reg_sighandler(self,
                       debug: bool = False,
                       buf: Type.BufT = Type.BufT.DEBUG) -> None:
        if debug:
            Printer.Printer.inst().buf(
                Printer.Printer.inst().f_title('signal handler info'), buf)
            Printer.Printer.inst().buf('@target: ', buf, indent=2)

            for i in range(len(self.__sig_handler)):
                Printer.Printer.inst().buf(
                    f'[{i}] {self.__sig_handler[i].brief}({self.__sig_handler[i].sig})',
                    buf,
                    indent=4)

            Printer.Printer.inst().buf_newline(buf)
            Printer.Printer.inst().buf(
                Printer.Printer.inst().f_title('registering signal handler'),
                buf)

            for handler in self.__sig_handler:
                Printer.Printer.inst().buf(
                    Printer.Printer.inst().f_prog(
                        f'Registering {handler.brief} handler'), buf, False, 2)

                try:
                    signal.signal(handler.sig, handler.handler)
                except OSError as os_err:
                    Printer.Printer.inst().buf(
                        Printer.Printer.inst().f_col('fail', Type.Col.RED),
                        buf)

                    raise Error.SysErr(Type.SysErrT.REG_FAIL,
                                       sig=handler.brief,
                                       err_str=os_err.strerror)
                else:
                    Printer.Printer.inst().buf(
                        Printer.Printer.inst().f_col('done', Type.Col.BLUE),
                        buf)
                    Printer.Printer.inst().buf(f'@handler: {handler.handler}',
                                               buf,
                                               indent=4)
                    Printer.Printer.inst().buf_newline(buf)
        else:
            for handler in self.__sig_handler:
                try:
                    signal.signal(handler.sig, handler.handler)
                except OSError as os_err:
                    raise Error.SysErr(Type.SysErrT.REG_FAIL,
                                       sig=handler.brief,
                                       err_str=os_err.strerror)
def timeout(lim: int) -> None:
    try:
        signal.signal(signal.SIGALRM, sigalrm_handler)
    except OSError as os_err:
        raise Error.SysErr(Type.SysErrT.REG_FAIL,
                           sig='SIGALRM',
                           err_str=os_err.strerror)

    if lim > 0:
        signal.alarm(lim)

    try:
        yield
    except TimeoutError:
        pass
    finally:
        signal.alarm(0)

        try:
            signal.signal(signal.SIGALRM, signal.SIG_IGN)
        except OSError as os_err:
            raise Error.SysErr(Type.SysErrT.UNREG_FAIL,
                               sig='SIGALRM',
                               err_str=os_err.strerror)
def sigalrm_handler(sig, frame) -> None:
    raise Error.SysErr(Type.SysErrT.TIMEOUT)