我正在用bash编写一个模拟评分脚本。它应该执行一个C程序,它会给出一些输出(我重定向到一个文件。)我试图(1)在一定时间后使其超时,并且(2)如果输出文件到达某个文件则终止大小限制。不知道如何去做其中任何一个。有帮助吗?感谢。
答案 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
答案 2 :(得分:0)
这将启动 yourcommand ,通过 dd 将输出重定向到 youroutputfile 并在其上设置10000000字节的限制: dd 将终止,SIGPIPE将被发送到 yourcommand
yourcommand | dd of=youroutputfile bs=1 count=10000000 &
如果尚未终止,则等待5秒并终止你的命令:
sleep 5
kill %yourcommand