【问题标题】:Linux: timeout base on CPU timeLinux:基于 CPU 时间的超时
【发布时间】:2015-12-10 15:49:34
【问题描述】:

有没有办法在 Linux 中根据 CPU 执行该程序所花费的实际时间而不是挂钟时间来为程序设置超时? 可能是系统负载过重,或者有很多上下文切换会使挂钟超时测量值无法比较。 我正在寻找 Python、C 或 Bash 中的解决方案。

【问题讨论】:

    标签: linux timeout


    【解决方案1】:

    这是我编写的与timeout 命令类似的shell 脚本。

    ctimeout timeout command arg ...
    

    如果命令的 CPU 时间超过超时值(以秒为单位),该命令将被终止。

    它使用ulimit -t 内置命令。底层系统调用setrlimit 将 CPU 时间的秒数作为其参数,因此 timeout 参数应该是一个整数。 bash 的ulimit -t 拒绝带小数点的参数。 ksh 接受带小数点的参数,但会向下舍入到最接近的整秒。

    任何带有嵌入空格的参数都应该用\'\" 包围。

    #!/bin/sh
    if test $# -lt 2
    then
        echo "Usage: $0 timeout command arg ..."
        exit 126
    fi
    ulimit -t $1 || { echo "Error: cannot set timeout $1"; exit 126; }
    shift
    eval "$@"
    

    【讨论】:

    • 谢谢,马克!如果我从我的脚本中调用这个脚本,当我的脚本终止时,限制是否会保留在系统中?
    • 设置 ulimit 只会影响进程及其在设置 ulimit 后创建的任何子进程。在可执行的 shell 脚本中运行 ulimit 不会影响您从中运行它的 shell。
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2020-04-06
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多