import json, os, pathlib, resource, subprocess, sys, time
prefix = pathlib.Path(sys.argv[1])
start = time.monotonic()
samples = []
with prefix.with_suffix('.log').open('w') as output:
    process = subprocess.Popen(sys.argv[2:], stdout=output, stderr=subprocess.STDOUT)
    while process.poll() is None:
        try:
            status = pathlib.Path(f'/proc/{process.pid}/status').read_text()
            fields = {line.split(':')[0]: line.split(':')[1].strip() for line in status.splitlines()}
            samples.append({'seconds': time.monotonic()-start, 'resident_kib': int(fields.get('VmRSS', '0 kB').split()[0]), 'peak_kib': int(fields.get('VmHWM', '0 kB').split()[0])})
        except FileNotFoundError:
            pass
        time.sleep(0.2)
result = {'elapsed_seconds': time.monotonic()-start, 'exit_code': process.returncode, 'peak_kib': resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss, 'samples': samples}
prefix.with_suffix('.memory.json').write_text(json.dumps(result))
sys.exit(process.returncode)
