我正在研究一些涉及以下內容的批次腳本:
- 運行一些非終止子流程(非同步)
- 等待t秒
- 執行其他任務X一段時間
- 終止子進程
理想情況下,我希望能夠區分已發出的子程序的標準輸出前 X從已經發出的後 X。
我想到了一些想法,儘管我不知道如何實施它們:
- 丟棄標準輸出t秒
- 插入一些文字(例如“任務 X 已開始”)以在視覺上分隔各個部分
- 將 stdout 拆分為各種輸出流
答案1
雖然你可能會使問題變得exec
複雜文件描述符爭論,你的第二個建議是最簡單的。在開始之前X,echo
日誌檔案中的標記字串。
所有這些命令都將附加到同一個檔案中,因此在前面添加所有輸出可能是個好主意X帶有標記,這樣您就可以將其輸出與仍在運行的先前命令之一區分開來。大致如下:
{ X; } | sed 's,^,[X say] ,'
這將使進一步的分析變得更加簡單。這是不安全的,對於非常冗長的程序,競爭條件會經常發生。
如果您願意抓住機會打破一條日誌行並且可以中斷第一批應用程式而不產生任何後果,那麼這也可以:
{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "\nX started" >> log
kill -CONT %%
{ X; } >> log2