프로세스 시간 초과 설정 및 메모리 제한

프로세스 시간 초과 설정 및 메모리 제한

시간 초과 및 최대 메모리 제한이 있는 내 컴퓨터에서 대규모 프로세스를 실행하려고 합니다. 메모리 사용량을 처리하기 위해 cgroup을 생성하고 다음 셸 스크립트를 사용하여 프로세스를 시작했습니다.

#!/usr/bin/env bash

set -e
set -o pipefail
set -u
set -m

name="$1" && shift

"$@" &
PID=$!

if [[ -f /sys/fs/cgroup/memory/$name/cgroup.procs ]]; then
    echo "[MEMLIMIT] Adding $PID to $name cgroup..."
    echo "$PID" | tee "/sys/fs/cgroup/memory/$name/cgroup.procs"
else
    echo "[MEMLIMIT] Was not able to set memory-limiting, create cgroup first with crtmemcgrp.sh ..."
fi

# Take job back to focus, can then be killed by Ctrl+C
fg

다음으로 프로세스 실행 시간을 최대 10분으로 제한하고 싶습니다. 그래서 다음 명령줄을 사용합니다.

$ timeout 10m ./memlimit cgroup_name ./long_process [args]

내 문제는 시간 초과가 만료되면 memlimit스크립트가 종료되지만 종료되지 않는다는 것입니다 long_process. 내가 이해하는 바는 timeoutcoreutils 명령이 자체 프로세스 그룹을 생성하고 시작 시 여기에 추가된다는 것입니다.

따라서 모든 후속 fork()호출도 동일한 프로세스 그룹에 있어야 하며 시간 초과로 인해 그룹이 종료되면 종료되어야 합니다.

여기서 무슨 일이 일어나고 있으며 어떻게 해결할 수 있습니까?

관련 정보