Обобщают ли какие-либо оболочки понятие конвейера на несколько параллельных конвейеров? Потребуются ли для его поддержки изменения в ядре ОС?

Установите время ожидания, например,. 1000000 (10 секунд )-, затем ffmpeg завершит работу, если не получит никаких данных в течение 10 секунд. Тогда вы можете, например. запустить ffmpeg в цикле.

-1
28.10.2021, 11:35
2 ответа

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

Давайте посмотрим на ваш первый пример:

cat mypemfile.crt |
(openssl x509 -noout -text | fgrep Subject:)

Вы хотите, чтобы входной файл был разбит вдоль строк, содержащих BEGIN и END, но catне заботится о содержимом, и каналы в любом случае не имеют индикации выхода за пределы разделителей записей.

Этого можно было бы добиться с помощью определенных соглашений об источнике и назначении канала, но это устранило бы главное преимущество канала, состоящее в возможности комбинировать программы в качестве строительных блоков для задач, которые не были предусмотрены их авторами.

В этом конкретном примере было бы намного проще изменить opensslдля обработки нескольких сертификатов в одном потоке, чем изменить opensslдля обработки нескольких потоков И изменить catдля предоставления этих нескольких потоков.

0
28.10.2021, 13:52

С помощью GNU Parallel:

cat mypemfile.crt |
  parallel --pipe -N1 --recstart '-----BEGIN' 'openssl x509 -noout -text | fgrep Subject:'

Не проверено:

sudo docker ps | awk '{print $1}' |
  sudo parallel -j0 --lb docker logs -t -f {}

sudo docker ps | awk '{print $1}' |
  sudo parallel -j0 --tag --lb docker logs -t -f {}
2
29.10.2021, 20:48

Теги

Похожие вопросы