我在 中编写了一个分析器OCaml
,分析器将一个文件作为参数并返回一个评估:GOOD
, BAD
, ... 我有一个makefile
在一组文件上一个接一个地启动分析器。
对于一些大文件,分析需要很长时间。所以我想为分析设置一个计时器:如果分析时间超过3秒,则停止当前文件的分析并TOO LONG
返回,我们继续下一个文件......
谁能告诉我在哪里添加这个计时器?围绕函数 inOCaml
或 in makefile
? 怎么做?
编辑:一部分makefile
:
allev: all
@n=0; \
for f in \
`find . -ipath '*/fetch/evs/*.ev' -exec grep -L -e "' Error" {} \;`; \
do \
let "n+=1"; \
echo "oooooooooooooooooooooooooooooooooooooooo" $$n; \
echo $$f; \
./$(BIN) $$f & \
PID=$$!; \
(sleep 0.001; kill $$PID) & \
wait $$PID; \
echo $$?; \
done
实际上0.001
第二个对于大多数分析来说太短了,所以我得到了
- 很多
143
,用于第二次无法完成的分析0.001
。 /bin/bash: line 10: 60202 Terminated ./analyze $f
,我猜这种消息是在分析无法在第二秒完成时打印的0.001
?/bin/bash: line 9: kill: (60241) - No such process
,我猜这种消息是在分析可以在一0.001
秒钟内完成时打印的?
从字面上看,关于发生的事情,这些消息看起来仍然很奇怪......
编辑2:
我以秒为计时器对大约 4000 个文件运行分析器3
,因此大部分分析可以在3
几秒钟内完成。他们给了我很多信息,例如/bin/bash: line 9: kill: (60241) - No such process
。
奇怪的是,在分析完所有文件后,终端的光标并没有启动新的命令行。如果我按下Ctrl+C
,它将立即启动一个新的命令行。有谁知道为什么?