выход из хвоста, когда другой процесс завершен

выход из хвоста, когда другой процесс завершен

У меня есть

parallel --j 2 -- "sh script1" "sh script2"

где script1и script2войти в файлы log1иlog2

Я хотел бы изменить это на:

parallel --j 3 -- "sh script1" "sh script2" "tail -f log1 log2"

Причина использования tail в том, что когда я позволяю двум скриптам выводить данные на экран одновременно, вывод становится беспорядочным, я теряю курсор и т. д. Возникают проблемы — мне приходится перезапускать терминал почти после каждого выполнения.

Проблема в том, что теперь это будет продолжаться вечно, а я хотел бы, чтобы tail завершил работу, когда script1 и script2 закончатся. Как мне это сделать?

решение1

Это можеттакжене то, что вы хотите, но как насчет:

parallel --j 2 -- "sh script1" "sh script2"; tail log1 log2

После завершения обеих задач вы избавитесь от необходимости ждать tailоба файла журнала.

решение2

на самом деле, я нашел то, что мне нужно сделать:

parallel --j 2 -- "sh script1" "sh script2" &
PID=$!
tail --pid=$PID -f log1 log2

решение3

я хотел бы использоватьМногохвостыйилиtmux.

решение4

parallel --j 2 -- "sh script1" "sh script2" & tail -f log1 log2

Это происходит parallel ...в фоновом режиме, а затем запускается tail ....

Нажатие Ctrl-Cна хвост не повлияет на parallelвыполнение заданий.

Если вам нужно перевести parallelна передний план, завершите tailи введите fg. Чтобы снова отправить его на задний план (например, чтобы вы могли запустить его tailеще раз), нажмите Ctrl-Zи введите bg. Или вы можете завершить его с помощьюkill %%

Более подробную информацию смотрите в документации к вашей оболочке. Например, если вы используете bash, запустите man bashи найдите (все заглавные буквы) JOB CONTROL.

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