def METHOD_NAME(skale, skale_ima, node_config):
    # signal.signal(signal.SIGTERM, pm_signal_handler)
    logger.info('Process manager started')
    node_id = node_config.id
    node_info = node_config.all()
    notify_if_not_enough_balance(skale, node_info)
    schains_to_monitor = fetch_schains_to_monitor(skale, node_id)
    for schain in schains_to_monitor:
        schain_record = upsert_schain_record(schain['name'])
        log_prefix = f'sChain {schain["name"]} -'  # todo - move to logger formatter
        terminate_stuck_schain_process(skale, schain_record, schain)
        monitor_process_alive = is_monitor_process_alive(schain_record.monitor_id)
        if not monitor_process_alive:
            logger.info(f'{log_prefix} PID {schain_record.monitor_id} is not running, spawning...')
            process = Process(
                name=schain['name'],
                target=run_monitor_for_schain,
                args=(
                    skale,
                    skale_ima,
                    node_config,
                    schain
                )
            )
            process.start()
            schain_record.set_monitor_id(process.ident)
            logger.info(f'{log_prefix} Process started: PID = {process.ident}')
        else:
            logger.info(f'{log_prefix} Process is running: PID = {schain_record.monitor_id}')
    logger.info('Process manager procedure finished')