Bash:执行命令时终止超时/文件溢出

时间:2010-04-13 03:43:46

标签: bash shell scripting timeout overflow

我正在用bash编写一个模拟评分脚本。它应该执行一个C程序,它会给出一些输出(我重定向到一个文件。)我试图(1)在一定时间后使其超时,并且(2)如果输出文件到达某个文件则终止大小限制。不知道如何去做其中任何一个。有帮助吗?感谢。

3 个答案:

答案 0 :(得分:3)

有一个GNU coreutil命令timeout来执行超时。

调查ulimit -f 32以设置最大文件大小(为16 KiB;它以512字节块计算)。

异议:

  

ulimit []是合适的,因为我还必须创建其他文件。我只需要限制其中一个。

计数器:除非程序必须创建一个大文件和一个小文件,并且你必须只限制小文件,否则你可以使用子shell来达到良好的效果:

(
ulimit -f 32
timeout 10m -- command arg >file
)

文件大小的限制仅限于子shell中的命令(由括号括起来)。

答案 1 :(得分:0)

您可以使用timeout命令,例如

timeout -s 9 5s ./c_program > file

要检查文件大小,您可以对文件进行统计,然后执行if/else

limit=1234 #bytes
size=$(stat -c "%s" file)
if [ "$size"  -gt "$limit" ] ;then
  exit
fi

如果您不能使用这些GNU工具,请参阅here,或here了解其他一些灵感。

答案 2 :(得分:0)

这将启动 yourcommand ,通过 dd 将输出重定向到 youroutputfile 并在其上设置10000000字节的限制: dd 将终止,SIGPIPE将被发送到 yourcommand

yourcommand | dd of=youroutputfile bs=1 count=10000000 &

如果尚未终止,则等待5秒并终止你的命令

sleep 5
kill %yourcommand