#linux #bash
#linux #bash
Вопрос:
Предположим, у меня есть программа на C, и она создает потоки для выполнения разных задач. Теперь я хочу перенаправить stdout
определенный поток в сценариях bash?
Здесь вы можете предположить, что у меня всегда есть способ получить идентификатор процесса и идентификатор потока, я только хочу знать, возможно ли это сделать с помощью сценариев bash и как?
Примечание: речь идет не о процессе, а о потоке, и я пока не нашел никаких вопросов, связанных с этим.
Комментарии:
1. В процессе есть только один
stdout
, все потоки совместно используют его, поэтому иногда вам приходится защищать его с помощью какого-то мьютекса. Это относится ко всей таблице файловых дескрипторов, а не толькоstdout
(fd 1).
Ответ №1:
Существует только одна консоль, а не по одной на поток. Итак, когда 5 потоков записывают параллельно стандартному выводу, все это поступает в один приемник, в основном недетерминированными способами.
Таким образом, если каждая строка не содержит определенную строку, которая идентифицирует исходный поток, вы не можете разобрать этот вывод постфактум.
В качестве альтернативы, вы могли бы заставить свои потоки записывать в разные файлы! Когда вы не объединяете случайный вывод, гораздо проще позже получить доступ к отдельным источникам.