Труба - это длинная труба, которая содержит много данных. Если приемный конец канала перестает извлекать данные, он начинает резервное копирование, и канал разрывается. Компьютер информирует конец, который вставляет данные в канал, о том, что это произошло.
Всезнающий
Ответы:
7
Канал - это просто механизм межпроцессного взаимодействия (IPC), используемый для соединения стандартного выхода одного процесса со стандартным входом другого.
Например, когда вы хотите найти в файле слово «pax»:
cat filename | grep pax
и да, я знаю, что вы можете grepфайл напрямую, но это не объясняет, как он работает, не так ли?
Это соединяет стандартный вывод catкоманды со стандартным вводом grepкоманды. catотправляет содержимое файла на его стандартный вывод и grepсчитывает его файл (в данном случае) со своего стандартного ввода. Соединяя процессы вместе, как это, вы можете создавать свои собственные инструменты, состоящие из любого количества сегментов трубы. Вещи как:
Сломана труба одна , где ( как правило) получатель данных закрыл соединение , пока отправитель все еще пытается отправить вещи через.
Например, если вы отправляете большой файл через программу-пейджер (чтобы просмотреть его по одной странице за раз):
cat myfile | pager
и затем выполните a CTRL-BREAK, это может привести к тому, что pagerпроцесс завершит свою входную трубу до того, catкак завершит его использование. Это одна возможность получить эту сломанную трубу.
В результате краткого поиска в Google эта конкретная проблема, по-видимому, связана со специальными развертываниями, и в число предлагаемых решений обычно входит выход из большинства программного обеспечения и перезагрузка большинства ваших устройств.
Это, вероятно, достаточно серьезно, чтобы сообщить об этой проблеме Apple. Чем больше разработчиков жалуются на это, тем больше вероятность, что что-то будет сделано, чтобы это исправить.
pr -e4 -n ten-thousand-lines.c | sed 10qзаканчивается сломанной трубой. prПотрудитесь ли сказать вам, что он получил сигнал SIGPIPE - другое дело; он может просто выйти в результате сигнала (генерируя ненулевой статус выхода).
Джонатан Леффлер
Трубы не обязательно соединяют «стандартный» вход и выход. Можно программно пропустить любой ввод / вывод через канал, хотя из командной строки вы правы.
CarlF
2
|Характер часто называют трубами. В различных оболочках UNIX (о которых я знаю) его можно использовать для передачи вывода одной команды на вход другой.
cat myfile.txt | head
Команда headпоказывает только первые несколько строк своего ввода. В этот момент он закрывает свой вход. Это создает проблему для команды, которая генерировала ввод. Куда это пишет? Всякий раз, когда у нас возникает такая ситуация или ситуация, когда процесс записи заканчивается до того, как читатель закончил, это называется «сломанной трубой».
Чтобы catкоманда не задерживалась вечно, стандарт UNIX определяет специальный сигнал ( SIGPIPE , сигнал 13 ), который она отправляет cat. Действие по умолчанию для этого сигнала - убить процесс, что catхорошо завершает работу.
Похоже, что приложение, которое вы используете, установило обработчик сигналов для всех сигналов, включая SIGPIPE, который создает небольшое всплывающее сообщение, которое вы видите.
Канал - это механизм IPC в системах Unix. Канал имеет два конца: конец чтения и конец записи. Данные, которые записываются в конец записи, могут быть прочитаны из конца чтения и выводятся в том порядке, в котором они были записаны.
В мире командной строки Unix каналы - очень распространенный способ соединения программ для выполнения работы. Например sed 's/foo/bar/g' fred.txt | grep -e 'bar.*baz', прочитаем в файле, fred.txtзаменим все экземпляры строки fooна строку, barзатем ищем в результатах строки, которые содержат barнекоторое количество символов, затем baz.
Это, конечно, не кажется очень полезным. Но я уверен, что если вы подумаете об этом, вы увидите, как вы можете использовать это для всех видов интересного использования, особенно если у вас есть такие программы, как awkили perlв вашем распоряжении.
Система трубопроводов была частью Unix с самого начала. И если процесс в вашем конвейере завершается, вы обычно хотите, чтобы все программы в конвейере завершались. Это означает, что по умолчанию процесс, который записывает в канал, если процесс на конце чтения завершен, получит SIGPIPEсигнал. И если он заблокировал этот сигнал, то writeвсе равно произойдет сбой с особой ошибкой, указывающей, что канал «сломался».
Обработка по умолчанию SIGPIPEуничтожает процесс, который его получает. И если это не «голова» конвейера, все SIGPIPEэто распространяется обратно вверх по цепочке.
Xcode жалуется на то, что он запустил какую-то подпрограмму, чтобы сделать что-то с ведущим к нему каналом, и эта подпрограмма неожиданно умерла, оставив трубу сломанной.
«Разорванный» канал - это канал, на котором один конец был close()прочитан, а другой читается или записывается. Например, в следующей команде оболочки:
cat foo | less
catПроцесс занимает конец пишущей трубы, и lessпроцесс чтения один. Если процесс чтения закрывает трубу, труба сломана (и поэтому бесполезна); процесс записи получит ошибку «сломанный канал» от операционной системы.
Фактически, это только "сломано", если читатель закрывает это. Если автор закрывает его (как, catочевидно, будет, как только он закончил), читатель просто увидит нормальный конец файла.
Ответы:
Канал - это просто механизм межпроцессного взаимодействия (IPC), используемый для соединения стандартного выхода одного процесса со стандартным входом другого.
Например, когда вы хотите найти в файле слово «pax»:
и да, я знаю, что вы можете
grep
файл напрямую, но это не объясняет, как он работает, не так ли?Это соединяет стандартный вывод
cat
команды со стандартным вводомgrep
команды.cat
отправляет содержимое файла на его стандартный вывод иgrep
считывает его файл (в данном случае) со своего стандартного ввода. Соединяя процессы вместе, как это, вы можете создавать свои собственные инструменты, состоящие из любого количества сегментов трубы. Вещи как:Сломана труба одна , где ( как правило) получатель данных закрыл соединение , пока отправитель все еще пытается отправить вещи через.
Например, если вы отправляете большой файл через программу-пейджер (чтобы просмотреть его по одной странице за раз):
и затем выполните a CTRL-BREAK, это может привести к тому, что
pager
процесс завершит свою входную трубу до того,cat
как завершит его использование. Это одна возможность получить эту сломанную трубу.В результате краткого поиска в Google эта конкретная проблема, по-видимому, связана со специальными развертываниями, и в число предлагаемых решений обычно входит выход из большинства программного обеспечения и перезагрузка большинства ваших устройств.
Это, вероятно, достаточно серьезно, чтобы сообщить об этой проблеме Apple. Чем больше разработчиков жалуются на это, тем больше вероятность, что что-то будет сделано, чтобы это исправить.
источник
pr -e4 -n ten-thousand-lines.c | sed 10q
заканчивается сломанной трубой.pr
Потрудитесь ли сказать вам, что он получил сигнал SIGPIPE - другое дело; он может просто выйти в результате сигнала (генерируя ненулевой статус выхода).|
Характер часто называют трубами. В различных оболочках UNIX (о которых я знаю) его можно использовать для передачи вывода одной команды на вход другой.Команда
head
показывает только первые несколько строк своего ввода. В этот момент он закрывает свой вход. Это создает проблему для команды, которая генерировала ввод. Куда это пишет? Всякий раз, когда у нас возникает такая ситуация или ситуация, когда процесс записи заканчивается до того, как читатель закончил, это называется «сломанной трубой».Чтобы
cat
команда не задерживалась вечно, стандарт UNIX определяет специальный сигнал ( SIGPIPE , сигнал 13 ), который она отправляетcat
. Действие по умолчанию для этого сигнала - убить процесс, чтоcat
хорошо завершает работу.Похоже, что приложение, которое вы используете, установило обработчик сигналов для всех сигналов, включая SIGPIPE, который создает небольшое всплывающее сообщение, которое вы видите.
источник
Эта ошибка, кажется, появляется довольно часто. /programming/490366/ad-hoc-deployment-issue-putpkt-write-failed-broken-pipe it "... внутренняя ошибка в способности Xcode общаться с вашим телефоном. значит, вы сделали что-то не так, это ошибка в системе разработки "
источник
Канал - это механизм IPC в системах Unix. Канал имеет два конца: конец чтения и конец записи. Данные, которые записываются в конец записи, могут быть прочитаны из конца чтения и выводятся в том порядке, в котором они были записаны.
В мире командной строки Unix каналы - очень распространенный способ соединения программ для выполнения работы. Например
sed 's/foo/bar/g' fred.txt | grep -e 'bar.*baz'
, прочитаем в файле,fred.txt
заменим все экземпляры строкиfoo
на строку,bar
затем ищем в результатах строки, которые содержатbar
некоторое количество символов, затемbaz
.Это, конечно, не кажется очень полезным. Но я уверен, что если вы подумаете об этом, вы увидите, как вы можете использовать это для всех видов интересного использования, особенно если у вас есть такие программы, как
awk
илиperl
в вашем распоряжении.Система трубопроводов была частью Unix с самого начала. И если процесс в вашем конвейере завершается, вы обычно хотите, чтобы все программы в конвейере завершались. Это означает, что по умолчанию процесс, который записывает в канал, если процесс на конце чтения завершен, получит
SIGPIPE
сигнал. И если он заблокировал этот сигнал, тоwrite
все равно произойдет сбой с особой ошибкой, указывающей, что канал «сломался».Обработка по умолчанию
SIGPIPE
уничтожает процесс, который его получает. И если это не «голова» конвейера, всеSIGPIPE
это распространяется обратно вверх по цепочке.Xcode жалуется на то, что он запустил какую-то подпрограмму, чтобы сделать что-то с ведущим к нему каналом, и эта подпрограмма неожиданно умерла, оставив трубу сломанной.
источник
«Разорванный» канал - это канал, на котором один конец был
close()
прочитан, а другой читается или записывается. Например, в следующей команде оболочки:cat
Процесс занимает конец пишущей трубы, иless
процесс чтения один. Если процесс чтения закрывает трубу, труба сломана (и поэтому бесполезна); процесс записи получит ошибку «сломанный канал» от операционной системы.источник
cat
очевидно, будет, как только он закончил), читатель просто увидит нормальный конец файла.