def main()

in record.py [0:0]


def main(args=None):
    global orig_attrs
    global rfile_format
    global rfile_permission
    global remove_perf_data

    if not args:
        parser = argparse.ArgumentParser()
        set_argparser(parser)
        args = parser.parse_args()

    _damon.chk_permission()
    _damon.chk_update_debugfs(args.debugfs)

    if args.rbuf and not _damon.feature_supported('record'):
        print('# \'--rbuf\' will be ignored')
    if not args.rbuf:
        args.rbuf = 1024 * 1024

    rfile_format = args.output_type
    remove_perf_data = not args.leave_perf_data
    rfile_permission = int(args.output_permission, 8)
    if rfile_permission < 0o0 or rfile_permission > 0o777:
        print('wrong --output_permission (%s)' % rfile_permission)
        exit(1)

    signal.signal(signal.SIGINT, sighandler)
    signal.signal(signal.SIGTERM, sighandler)
    orig_attrs = _damon.current_attrs()

    new_attrs = _damon.cmd_args_to_attrs(args)
    init_regions = _damon.cmd_args_to_init_regions(args)
    numa_node = args.numa_node
    target = args.target

    if target == 'paddr':   # physical memory address space
        cmd_target = False
        if not init_regions:
            if numa_node != None:
                init_regions = _paddr_layout.paddr_region_of(numa_node)
            else:
                init_regions = [_paddr_layout.default_paddr_region()]
    elif not subprocess.call('which %s &> /dev/null' % target.split()[0],
            shell=True, executable='/bin/bash'):
        cmd_target = True
    else:
        try:
            pid = int(target)
        except:
            print('target \'%s\' is not supported' % target)
            exit(1)
        cmd_target = False
    do_record(target, cmd_target, args.target_ids_prefix, init_regions,
            new_attrs, orig_attrs)