私は以下を含むいくつかのバッチスクリプトに取り組んでいます:
- いくつかの非終了サブプロセスを(非同期で)実行します
- tを待ちます 秒
- 他のタスクを実行するX しばらくの間
- サブプロセスを終了する
理想的には、以前に放出されたサブプロセスの標準を区別できるようにしたいと思います。 X 後に放出されたものから X 。
いくつかのアイデアが思い浮かびますが、それらをどのように実装するかはわかりません。
- tのstdoutを破棄します 秒
- セクションを視覚的に区切るために、テキスト(たとえば、「タスクXが開始されました」)を挿入します
- stdoutをさまざまな出力ストリームに分割します
承認された回答:
exec
で問題を複雑にすることもできますが そして余分なファイル記述子のラングリング、あなたの2番目の提案は最も簡単です。 Xを開始する前に 、echo
ログファイルへのマーカー文字列。
これらのコマンドはすべて同じファイルに追加されるため、 Xのすべての出力を追加することをお勧めします。 マーカーを使用すると、その出力を、まだ実行中の前のコマンドの1つと区別できます。次のようなもの:
{ X; } | sed 's,^,[X say] ,'
これにより、さらなる分析がはるかに簡単になります。安全ではなく、非常に冗長なプログラムの場合、競合状態が頻繁に発生します。
1つのログ行を壊して、結果なしにアプリの最初のバッチを中断できる場合は、これも機能します。
{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "nX started" >> log
kill -CONT %%
{ X; } >> log2