我正在研究一些涉及以下内容的批处理脚本:
- 运行一些非终止子流程(异步)
- 等待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