Отменить stdout команды на t секунд

Отменить stdout команды на t секунд

Я работаю над несколькими пакетными скриптами, включающими следующее:

  • Запустить некоторые незавершающиеся подпроцессы (асинхронно)
  • Ждатьтсекунды
  • Выполнить другую задачуИксна некоторое время
  • Завершить подпроцессы

В идеале я хотел бы иметь возможность различать 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

Связанный контент