这篇文章有两个问题。。。
mymakefile的一部分如下:

list:       all
            while IFS= read -r f; \
            do \
                ./analyze $$f & \
            done < list.txt

list.txt包含一个文件名列表,然后make list遍历该列表并将./analyze应用于每个文件。
我经常使用make list > output.txt来记录我打印到stdout的所有内容。在这种情况下,终端中不显示任何内容。
但我刚刚意识到我不能中断执行。我尝试了Ctrl+CCtrl+DCtrl+Z,然后电脑看起来崩溃了,什么也做不了。
我刚刚意识到这一点的原因是,以前我在./analyze的调用周围有一个计时器。密码是
list:       all
            while IFS= read f; \
            do \
                ./analyze $$f & \
                PID=$$!; \
                (sleep 3; kill $$PID) & \
                wait $$PID; \
            done < list.txt
            sleep 3

然后,如果一个带有文件的调用花费了3秒以上,它将被停止,并继续执行下一个文件。在终端中,显示小于3秒的呼叫的/bin/bash: line 8: kill: (2970) - No such process列表,大于3秒的呼叫的/bin/bash: line 9: 2973 Terminated ./analyze $f列表。整个运行可以被Ctrl+C中断(尽管多次),并且输出可以写入output.txt
现在我意识到计时器不再是必要的了。所以我的问题是:
1)如何在没有计时器或makefile的OCaml代码的情况下修改./analyze,以便中断它。
2)对于make list > output.txt,如何在执行时在终端中打印一些简单的信息,使我能够看到它的进展?

最佳答案

你需要摆脱那个符号和字符:

list:       all
            while IFS= read -r f; \
            do \
                ./analyze $$f & <--- *** THIS ONE ***
            done < list.txt

因为它告诉shell在后台启动analyze(并继续执行脚本)。这就是为什么不能用ctrl-C中断analyze的原因,也很可能是为什么不能重定向其输出(make命令在analyze进程有机会写入其输出之前终止)。

关于linux - 中断执行并在终端中打印部分信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19895313/

10-09 12:36