Я работаю над несколькими пакетными скриптами, включающими следующее:
- Запустить некоторые незавершающиеся подпроцессы (асинхронно)
- Ждатьтсекунды
- Выполнить другую задачуИксна некоторое время
- Завершить подпроцессы
В идеале я хотел бы иметь возможность различать stdout подпроцессов, которые были выведеныдо Иксиз того, что было испущенопосле Икс.
Мне в голову приходит несколько идей, хотя я понятия не имею, как их реализовать:
- Отменить stdout длятсекунды
- Вставьте текст (например, «Задача X начата»), чтобы визуально разделить разделы.
- Разделить stdout на различные выходные потоки
решение1
Хотя вы могли бы усложнить дело exec
дополнительнымипрепирательство с дескрипторами файлов, ваше второе предложение самое простое. Перед тем как начатьИкс, echo
строка маркера в файл журнала.
Все эти команды будут добавляться в один и тот же файл, поэтому, возможно, было бы хорошей идеей добавить все выходные данные в началоИксс маркером, чтобы вы могли отличить его вывод от вывода еще работающих предыдущих команд. Что-то вроде:
{ 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