这个主题大约有2个问题......
我的一部分makefile
如下:
list: all
while IFS= read -r f; \
do \
./analyze $$f & \
done < list.txt
list.txt
包含文件名列表,然后make list
遍历列表并应用于./analyze
每个文件。
我经常make list > output.txt
用来记录我打印到的所有内容stdout
。在这种情况下,终端中不会显示任何内容。
但我刚刚意识到我不能中断执行。我试过Ctrl+C
, Ctrl+D
, 或Ctrl+Z
, 然后电脑看起来崩溃了,什么也做不了。
我刚刚意识到的原因是以前我有一个围绕./analyze
. 代码是
list: all
while IFS= read f; \
do \
./analyze $$f & \
PID=$$!; \
(sleep 3; kill $$PID) & \
wait $$PID; \
done < list.txt
sleep 3
然后如果一个文件的调用时间超过 3 秒,它将被停止,并继续下一个文件。在终端中,会显示/bin/bash: line 8: kill: (2970) - No such process
通话时间少于 3 秒和通话时间超过 3 秒的列表/bin/bash: line 9: 2973 Terminated ./analyze $f
。整个运行可以被中断Ctrl+C
(尽管有几次),并且输出可以被写入output.txt
.
现在我意识到不再需要计时器了。所以我的问题是:
1)我如何在makefile
没有计时器或我的 OCaml 代码的情况下进行修改,./analyze
以便它可以被中断。
2)对于make list > output.txt
,我怎么还能在终端打印一些简单的信息,而执行,让我看到它的进展?