【发布时间】:2010-04-14 05:41:56
【问题描述】:
我正在用 bash 编写一个模拟评分脚本。它应该执行一个 C 程序,该程序将提供一些输出(我将其重定向到一个文件。)我试图(1)在一定时间后使其超时,并且(2)如果输出文件到达某个文件则终止大小限制。不确定如何处理其中任何一个。有什么帮助吗?谢谢。
【问题讨论】:
标签: bash shell scripting timeout overflow
我正在用 bash 编写一个模拟评分脚本。它应该执行一个 C 程序,该程序将提供一些输出(我将其重定向到一个文件。)我试图(1)在一定时间后使其超时,并且(2)如果输出文件到达某个文件则终止大小限制。不确定如何处理其中任何一个。有什么帮助吗?谢谢。
【问题讨论】:
标签: bash shell scripting timeout overflow
有一个 GNU coreutil 命令timeout 来执行超时。
调查 ulimit -f 32 以设置最大文件大小(为 16 KiB;它以 512 字节块计)。
反对:
ulimit [not] 适合,因为我还必须创建其他文件。我只需要限制其中一个。
计数器:除非程序必须创建一个大文件和一个小文件,并且您必须只限制小文件,否则您可以使用子shell来获得良好的效果:
(
ulimit -f 32
timeout 10m -- command arg >file
)
文件大小的限制仅限于子shell中的命令(由括号标记)。
【讨论】:
trap 处理该信号。 Racey,但它应该可以工作。
timeout。
这会启动 yourcommand,通过 dd 将输出重定向到 youroutputfile 并在其上设置 10000000 字节的限制:dd em> 将终止并且 SIGPIPE 将被发送到 yourcommand
yourcommand | dd of=youroutputfile bs=1 count=10000000 &
这将等待 5 秒并杀死 yourcommand(如果尚未终止):
sleep 5
kill %yourcommand
【讨论】: