私は次のようなバッチ スクリプトを作成中です。
- 終了しないサブプロセスをいくつか実行する(非同期)
- を待つt秒
- その他のタスクを実行するバツしばらくの間
- サブプロセスを終了する
理想的には、サブプロセスのstdoutを区別できるようにしたい。前に バツ放出されたものから後 バツ。
いくつかのアイデアが思い浮かびますが、それをどのように実装するかはわかりません。
- stdoutを破棄するt秒
- セクションを視覚的に区切るために、テキスト(たとえば、「タスクXが開始されました」)を挿入します。
- stdoutをさまざまな出力ストリームに分割する
答え1
問題を複雑にする可能性はありますexec
が、ファイル記述子の調整2番目の提案は最も簡単です。始める前にバツecho
ログ ファイルにマーカー文字列を追加します。
これらのコマンドはすべて同じファイルに追加されるので、すべての出力を先頭に追加するのが良いかもしれません。バツマーカーを付けて、その出力をまだ実行中の以前のコマンドの 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