这个主题大约有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,我怎么还能在终端打印一些简单的信息,而执行,让我看到它的进展?