プロセスタイムアウトの設定とメモリ制限

プロセスタイムアウトの設定とメモリ制限

タイムアウトと最大メモリ制限があるマイコンピュータで大規模なプロセスを実行しようとしています。メモリ使用量を処理するために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()呼び出しも同じプロセスグループに存在し、タイムアウトのためにグループが終了したときに終了する必要があります。

ここで何が起こっているのか、どうすれば解決できますか?

関連情報