このスレッドは約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
ましたが、PC がクラッシュしたように見え、何もできません。
私が今気づいた理由は、以前は の呼び出しの周りにタイマーがあったからです./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
、実行中にターミナルに簡単な情報を出力して、進行状況を確認するにはどうすればよいですか?