Linux:超时基于 CPU 时间

标签 linux timeout

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

最佳答案

这是我编写的一个 shell 脚本,类似于 timeout命令。

ctimeout timeout command arg ...

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

它使用 ulimit -t内置命令。底层系统调用,setrlimit , 将 CPU 时间的秒数作为其参数,因此超时参数应为整数。 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 "$@"

关于Linux:超时基于 CPU 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206171/

相关文章:

linux - Bash 的新手。简单脚本

linux - 是否可以在我的 jail.conf 中使用 maxretry 0?

linux - EOF 套接字失败和连接重置之间的区别

c - 示例 mq_timedreceive

linux - 如何在运行时 "use"一个模块

linux - 为什么在将数据从寄存器移动到内存时需要使用 [ ](方括号),而其他方式则不需要?

mysql - Java + Apache Commons DBCP 与 MySQL 的连接问题

java - RxJava 中的超时

ios - NSURLSession 超时

node.js - 是否可以在 node.js 请求中设置无限超时?