仅使用一个函数限制单个 Linux 进程的内存使用?

仅使用一个函数限制单个 Linux 进程的内存使用?

timeout()这是一个shell脚本,具有限制单个进程CPU时间使用的功能。是否可以通过类似的功能限制单个Linux进程的内存使用?

#!/bin/bash

################################################################################
# Executes command with a timeout
# Params:
#   $1 timeout in seconds
#   $2 command
# Returns 1 if timed out 0 otherwise
timeout() {

    time=$1

    # start the command in a subshell to avoid problem with pipes
    # (spawn accepts one command)
    command="/bin/sh -c \"$2\""

    expect -c "set echo \"-noecho\"; set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { exit 0 }"

    if [ $? = 1 ] ; then
        echo "Timeout after ${time} seconds"
    fi
}


timeout 100 "./program.exe"

done
exit 0

我读过类似的问题限制单个 Linux 进程的内存使用,以下所有答案都依赖于额外的工具或配置。我尝试了一些但失败了(例如,接受的答案https://unix.stackexchange.com/a/44988/302092推荐了一个工具,但当我运行其 Github 页面给出的示例时,我得到了意外的输出)。

ulimit有效,但我需要ulimit在最后一个过程完成后将其重置为无限制。所以我想知道目前是否有更简单的方法(也许只有一个函数)来实现这一点?

相关内容