Bash — как перенаправить стандартный вывод определенного потока?

#linux #bash

#linux #bash

Вопрос:

Предположим, у меня есть программа на C, и она создает потоки для выполнения разных задач. Теперь я хочу перенаправить stdout определенный поток в сценариях bash?

Здесь вы можете предположить, что у меня всегда есть способ получить идентификатор процесса и идентификатор потока, я только хочу знать, возможно ли это сделать с помощью сценариев bash и как?

Примечание: речь идет не о процессе, а о потоке, и я пока не нашел никаких вопросов, связанных с этим.

Комментарии:

1. В процессе есть только один stdout , все потоки совместно используют его, поэтому иногда вам приходится защищать его с помощью какого-то мьютекса. Это относится ко всей таблице файловых дескрипторов, а не только stdout (fd 1).

Ответ №1:

Существует только одна консоль, а не по одной на поток. Итак, когда 5 потоков записывают параллельно стандартному выводу, все это поступает в один приемник, в основном недетерминированными способами.

Таким образом, если каждая строка не содержит определенную строку, которая идентифицирует исходный поток, вы не можете разобрать этот вывод постфактум.

В качестве альтернативы, вы могли бы заставить свои потоки записывать в разные файлы! Когда вы не объединяете случайный вывод, гораздо проще позже получить доступ к отдельным источникам.