Чем можно закрыть трубы: 6 способов замаскировать трубы в санузле.

Опубликовано

Содержание

как спрятать, замаскировать в частном доме, как скрыть в квартире

Содержание:

Подбор материалов для маскировки труб
Критерии выбора оптимальной конструкции
Самостоятельное выполнение работы

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

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


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

В последнее время старый привычный способ, как замаскировать трубу при помощи покраски в соответствии с цветом стен, становится все менее распространенным.

Подбор материалов для маскировки труб

Принять решение, чем закрыть трубу отопления в комнате, поможет информация о наиболее популярных покрытиях:

  1. Гипсокартон. Этот материал занимает лидирующие позиции, поскольку отличается нетрудоемким монтажом и доступной для многих потребителей стоимостью. Любителей классического дизайна может заинтересовать отделка самоклейкой «под натуральную древесину» или деревянная обшивка – они способны придать интерьеру благородный стиль и уют. Те, кто предпочитает барокко, могут украсить гипсокартон лепниной. Неплохо смотрится даже оформление обоями.
  2. МДФ (плюс ламинат). Представляет собой современный обшивочный материал — недорогой, декоративный, имитирующий дорогостоящую древесину. Он способен украсить и облагородить интерьер любого помещения, в том числе офисного и гостиничного. Этот материал в процессе эксплуатации не деформируется под воздействием влажного воздуха и изменения температуры, он долговечен и прочен.
  3. ДСП (плюс ламинат). Также является хорошим выбором варианта, как скрыть трубы в квартире или частном домовладении. Он прост в обработке, легко крепится и подвергается облицовке. Заготовки без проблем можно приобрести в компаниях, специализирующихся на изготовлении мебели.
  4. Фанера. Наиболее удобный материал для самостоятельного строительства различных конструкций. Несмотря на легкость, тонкость и прочность, фанера имеет значительный недостаток. Она со временем под воздействием тепла и влажности начинает деформироваться.
  5. Древесина. Прекрасный вариант решения проблемы, как закрыть трубы отопления в частном доме, где владельцы стремятся создать уют. Натуральное дерево сочетается с мебелью, поскольку гармонично имитирует ее отдельные фрагменты. Используя рейки и бруски, можно самостоятельно замаскировать отопительные трубы даже в наиболее неудобных местах. Никакой вид обшивки невозможно сделать без этих деталей – они наиболее подходят для строительства каркаса.
  6. Пластик. Характеризуется высокими эксплуатационными характеристиками, простотой нарезки и фиксации. Материал обладает универсальными свойствами — гибкостью и гигиеничностью.
  7. Нержавейка или хромированный металл. Конструкции, сделанные из них, служат долго и хорошо отдают тепло. Они эффектно преобразят помещение в стиле хай-тек.
  8. Тканевые занавески. С их помощью можно ответить на вопрос, как замаскировать трубу отопления в комнате, оформленной в стилистике кантри. Занавески из ткани будут одним из основных элементов декора. В этом случае допустимо проведение экспериментов с цветовым решением и фасонами. Для крепления ткани используют карнизы разных форм.
  9. Экраны. Представляют собой переплетения из пластиковых или тканевых тонких лент, выполненных под прямым углом. Для этого вверху и внизу на каркасе крепят короткие ленточки в виде забора. Потом сквозь них в горизонтальном направлении протягивают другие ленты и фиксируют их на этой же раме. Для закрепления на деревянном каркасе можно задействовать мебельный степлер. Экраны, созданные таким способом, подходят к любому виду радиаторов. Но лентам из ткани потребуется регулярная стирка, поэтому на их концы желательно прикрепить липучки и фиксировать к каркасу именно ими.

Критерии выбора оптимальной конструкции

Чтобы сделать правильный выбор варианта, как скрыть трубы отопления в комнате, надо учесть:

  1. Качество и продолжительность эксплуатации зашивки, поскольку не все конструкции можно замаскировать наглухо. Если требуется скрыть старые трубы отопления, это необходимо сделать так, чтобы в любой момент имелась возможность разобрать отделку или снять декоративные короба. Не сварные соединения считаются слабыми звеньями отопительной конструкции по причине возможного протекания в месте стыка. В таком случае следует предусмотреть обустройство прямого доступа или возможность быстрой разборки.
  2. Наличие на отопительной конструкции различных приборов и узлов таких, как счетчики, вентили, фильтры. Им требуется прямой доступ, что обеспечивается при помощи люков.
  3. Расположение труб по отношению к стене — они могут находиться в нише или выступать. В первой ситуации их лучше закрыть съемными щитами, а во второй – будущая конструкция зависит от величины выступа и поэтому нужно будет построить каркас из реек и брусков или из профиля.

Самостоятельное выполнение работы

До того как скрыть трубы в комнате своими руками, продумывают будущую конструкцию и подготавливают инструменты и материалы, среди которых:

  • отвертка, болты, дрель, направляющие – для установки всех металлических элементов и стоечного профиля;
  • саморезы, дюбель – гвозди, жидкие гвозди, молоток, ножовка – для монтажа конструкции из пластика, гипсокартона, МДФ, дерева, картона.


Чтобы обеспечить циркуляцию теплого воздуха над трубами, каркас должен выступать над ними, то есть конструкцию нужно сделать немного шире, чем диаметр изделия плюс расстояние от него до стены. Читайте также: «Как спрятать трубы отопления в стенах или полу – оригинальные и проверенные идеи».


Каркас можно соорудить любой формы, но самая удобная для этого – прямоугольная:

  1. Вдоль стены на полу фиксируют направляющую с помощью шурупов или жидких гвоздей.
  2. Аналогичную часть каркаса фиксируют к стене выше труб, выравнивая ее расположение уровнем.
  3. В находящийся на полу элемент вставляют отрезки профиля нужной высоты на расстоянии 40 сантиметров один от другого и крепят их шурупами.
  4. Сверху на них помещают верхнюю направляющую, зафиксировав ее шурупами. В итоге получается устойчивое подобие заборчика.
  5. В направляющую, находящуюся на стене, помещают отрезки профиля и при помощи «усиков» прикрепляют их к заборчику.
    Строительство основы завершено.


Дальше выполняют зашивку каркаса отделочным материалом:

  1. Сплошным способом с использованием листов пластика, МДФ, картона и т.д.
  2. Сплошным методом со смотровыми лючками, которые обеспечат доступ к трубам.
  3. При помощи съемных коробов с креплениями, расположенными в удобных для фиксации местах.

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


топ 15 способов, 95 фото в интерьере

Что необходимо учесть при маскировке батареи

Перед тем, как приступить к маскировке, необходимо знать несколько важных нюансов:

  • Первым делом нужно понимать, что при любом способе произойдет потеря тепла.
  • Конвекционные потоки воздуха не должны ничем ограждаться, только так можно будет сохранить равномерный обогрев комнаты, а окна не будут запотевать.
  • Для различных ЧП стоит заранее продумать свободный доступ к резьбовым соединениям и радиатору — это может быть окошко или съемная конструкция, к примеру, дверь с петлями.
  • Для ремонта в хорошей доступности должны оставаться кран, термоголовка и другие элементы системы отопления.

Лучшие способы красиво скрыть радиаторы

Существует несколько способов спрятать батареи, в данном разделе рассмотрим самые популярные и эффективные.

Навесной экран

Является на сегодняшний день самым практичным и востребованным методом, чаще всего такая конструкция создается из металла и имеет свои плюсы:

  • простой монтаж;
  • тепловой обмен остается прежним;
  • может изготавливаться с закругленными углами, что снижает риски травмирования.

Экраны из стекла

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

Экраны-короба

Экраны-короба — это отличный вариант для декорирования радиаторов.

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

На фото оригинальный деревянный короб зеленого цвета в интерьере детской.

Шторы в пол

Не забываем и о самом популярном способе спрятать батареи — просто завесить их непрозрачными или полупрозрачными шторами. Использовав этот метод со временем вы даже сами забудет, что за занавесками находятся трубы и радиатор. Главное, подобрать шторы, которые будут гармонично выглядеть и не показывать всем свои видом, что за ними что-то есть.

Покраска в цвет стен

Как спрятать батарею отопления на стене, если другие конструкции «запрещены». Способ один, покрасить ее тем же цветом, что и стена.

Каркас из дерева

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

На фото обычные деревянные бруски стильно скрывают батарею в кухне.

Встроенная мебель

Еще одним распространенным способом, чем закрыть батарею отопления, считается мебель, выполненная на заказ, или встроенная мебель (полки, шкафы, откидные столики, места для сидения).

Спрятать радиатор с помощью мебели

Расставьте мебель, к примеру, кресло или письменный стол, таким образом, чтобы оно закрывало батарею. Чугунная батарея не привлекательна для многих, но предметы мебели могут ее скрыть.

Заменить на дизайнерскую модель

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

Оригинальные идеи

Существует много креативных идей, которые могут превратить батареи в декоративный элемент:

  • Кованные изделия

  • Скрыть радиатор с помощью ткани

  • Роспись и декупаж батарей

На фото с помощью красивой росписи батарея слилась со стеной.

Спрятать с помощью гипсокартона

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

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

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

Монтаж гипсокартонного короба своими руками

Для того, чтобы закрыть батарею, необходимо ее померить, а после купить металлические профили и другие дополнительные товары.

  • Какие материалы необходимы: гипсокартонный лист 12 миллиметров, металлические профили 27х28 и 60х27, саморезы по гипсокартону и металлу, дюбель-гвозди размером 6х40, строительная серпянка, перфорированные уголки.
  • Инструменты: шуруповерт, перфоратор, ножницы по металлу, канцелярский нож, строительный степлер, карандаш, рулетка, строительный уровень.

Внимание, для возведения гипсокартонного короба есть важное требование: нужно чтобы подоконник выходил за радиатор не меньше чем на 3 сантиметра.

Порядок работ:

  1. Установка каркаса. Профиль следует монтировать по трем примыкающим сторонам: пол, стена, подоконник. Прижмите рукой металлический профиль 27х28 к основанию, просверлите отверстие с помощью перфоратора сразу и в профиле и в стене. Шуруповертом закрутите в отверстие дюбель-гвоздь. Внизу подоконника на саморезы монтируется профиль из металла 27х28, длина саморезов не должна быть больше толщины подоконника. Далее можно поставить перемычки из металлического профиля 60х27.

  2. Выбор размера решетки. Данное отверстие необходимо изготовить несколько меньше размера решетки. Можно ориентироваться на три рекомендуемых размера: 60х120, 60х90 или 60х60.
  3. Установка гипсокартона. Гипсокартонные листы можно резать канцелярским ножом. Прикручивать шуруповертом. 

  4. Монтаж уголков. Их необходимо закрепить по углам строительным степлером, или прикрепить на гипсовую штукатурку. На все швы гипсокартонного короба следует наложить серпянку и замазать штукатуркой. Перед началом покраски или оклейки обоями гипсокартонный короб необходимо прошпаклевать, зачистить шкуркой и промазать грунтовкой.

Маскировка труб отопления

Не важно, квартира это или дом, спальня или кухня, везде хотелось бы иметь хороший ремонт. Сразу же возникают вопросы: как красиво спрятать трубы отопления и как можно это сделать с минимальными затратами и максимальной эффективностью? При этом способ маскировки должен быть действительно невидимый и незаметный, вписываясь в комнату. 

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

Короб на каркасе

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

Спрятать за декором

Декорация труб различными вариантами, к примеру, обмотать джутовой веревкой. Но помните, что таким образом снижается теплоотдача. Многие хозяева украшают трубы цветами, это можно сделать с помощью бамбука с листьями. Здесь должна работать только фантазия, даже старая труба может смотреться совершенно по-другому.

Окрашивание под цвет стен

Самый легкий и практичный метод — это окрасить батареи или стояк в цвет стен, при этом выделение тепла не уменьшится.

На фото в интерьере кухни трубы выкрашены в цвет синих стен.

Спрятать под напольный плинтус

Хорошим изобретением стал напольный плинтус, в который без труда можно спрятать батареи, расположенные горизонтально и низко к полу.

Фото в интерьере комнат

Кухня

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

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

На фото для маскировки радиаторов использованы деревянные короба.

Гостиная

Если радиатор стоит в нише, то широкий подоконник поможет создать рабочую зону.

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

На фото современная гостиная комната. Для того чтобы спрятать радиаторы смонтирована деревянная конструкция, которая также служит местом для отдыха, хранения и декора.

Спальня и детская

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

Ванная

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

Батареи отопления скрываем с помощью деревянных, стеклянных или пластиковых экранов.

На фото радиаторы в ванной спрятаны с помощью деревянного короба.

Прихожая

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

Примеры в разных стилях интерьера

Современный стиль

Для современного стиля или стиля хай-тек и минимализм подойдет любой материал, выполненный из дерева, стекла (стеклянные панели) или металла.

Классический стиль

Рекомендуется использовать натуральные материалы, лучше остановить свой выбор на деревянной решетке.

Прованс

Дерево также любит такие стили, как прованс, кантри, шале и экостиль.

Скандинавский

Деревянные решетки в светлых тонах будут уместно смотреться в скандинавской стиле.

Лофт

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

Фото галерея

Ниже представлены фото примеры маскировки батарей в комнатах различного функционального назначения.

Читать, пока труба не будет закрыта

Трубопровод прост. Вы усложняете себе задачу, прыгая в бассейн с самой глубокой стороны. (Или, возможно, это вина вашего инструктора, что он не научил вас лучше.)

Чтобы привыкнуть к трубкам, Я предлагаю вам написать две тривиально простые программы:

  1. Одна, которая просто записывает текст в стандартный вывод и завершает работу. Это может быть что-то простое — «Быстрая коричневая лиса перепрыгивает через ленивую собаку», «Lorem ipsum dolor sit amet, consectetur adipiscing elit, …», короткая строка (может быть, даже один символ), повторяющаяся много раз — что вы хотите. Используйте printf , запись , fprintf(stdout, …) , или любые другие функции, которые вам нравятся.

    Чтобы протестировать эту программу, просто запустите ее из командной строки. Он должен отобразить выбранный текст и выйти (вернуть вас в командную строку).

  2. И тот, который просто читает текст со стандартного ввода и записывает его в стандартный вывод. Используйте getc , gets , read или любые другие функции, которые вам нравятся. Выйдите, когда вы получите конец файла. Проверьте справочную страницу для любой функции, которую вы используете чтобы увидеть, как это указывает на конец файла.

    Чтобы протестировать эту программу, создайте текстовый файл (что-то вроде jon_file. txt ) и поместите в него текст. Вы можете сделать это быстро сказав что-то вроде echo "Hello world" > jon_file.txt , или вы можете использовать редактор. Затем введите prog2 < jon_file.txt . Он должен отображать содержимое файла и выйдите (вернитесь к командной строке).

Не называйте pipe , dup , или что-нибудь причудливое — даже открыть или закрыть . (Включите любой код отладки и/или аудита вы хотите убедиться, что вы понимаете, что происходит, когда.) Затем запустите prog1 | прог2 . Если вы все сделали правильно, вы получите ожидаемый результат.

Теперь попробуйте «сломать» его, добавив в программы вызовов sleep . Если вы сломаете его, дайте мне знать, как вы это сделали. Это должно быть почти невозможно — если вы не заставите одну программу (или обе) спать дольше, чем вы готовы сидеть и ждать, ты всегда получишь prog2 для вывода всех данных, которые записывает prog1 .

И если из приведенного выше примера непонятно: наличие родителя и ребенка (или, вообще, процессы по обе стороны трубы) работать «одновременно» — это правильно. 1 Программа чтения не будет «прекращаться первой» просто потому, что в канале нет данных на данный момент . Как вы должны были понять из предыдущего упражнения, если программа пытается читать из канала, в котором в данный момент нет данных, 9Системный вызов 0009 read заставит программу ждать поступления данных. Программа чтения не завершается пока в трубе не останется данных и больше не будет, всегда . 2 (В этот момент чтение вернет конец файла.) Указано условие «нет больше данных». программой записи, закрывающей канал (или выход, что эквивалентно, потому что exit вызывает close для всех дескрипторов открытых файлов).

Я не понимаю, почему вы потеете над системным вызовом read в этот момент — хотя, если вы еще не умеете им пользоваться, это подтверждает мое подозрение что ваш преподаватель представляет материал не в логическом порядке. (Я предполагаю, что вы имеете в виду системный вызов read , а не команду read .) Единственный способ, которым ваша программа имеет смысл если runcmd(pcmd->right) это что-то, что читается со стандартного ввода каким-то методом (типа нашей прог2 выше). Похоже, ваша программа просто выполняет функцию оболочки — настройка каналов, а затем запуск программ. На этом уровне нет причин для вашей программы (в той мере, в какой вы нам это показали) выполнять любой ввод-вывод (чтение или запись).
__________
1 Связанное чтение: В каком порядке выполняются конвейерные команды?
2 Конечно, это упрощение. Как вы скоро узнаете, если вы еще этого не сделали, вы можете спроектировать программу чтения так, чтобы она заканчивалась когда нет данных в канале в настоящее время — но это не поведение по умолчанию. Или вы можете разработать программу чтения для завершения при любом ряде других условий — например, если он читает q из канала. Или он может быть убит сигналом и т. д.


Я оглядываюсь на этот ответ шесть месяцев спустя, и я вижу, что я действительно не затронул весь вопрос; Я покрыл вторую половину, но не первую. Итак, продолжая вышеизложенное,

  1. Измените первую программу, чтобы записать лот данных — не менее 100 000 (10 5 ) или 102400 (2 10 × 10 2 ) символов — в стандартный вывод. Кроме того, если вы еще этого не сделали, измените его, чтобы записывать текущую информацию о состоянии в stderr. Это может быть что-то очень простое; например, один « . ” в stderr за каждые 1000 (или 1024) символов в stdout, и « !\n » в stderr, когда это будет сделано.

    Чтобы проверить это, запустите prog1 > /dev/null . Если вы последовали моему предложению (выше), вы должны увидеть 100 точек ( . ), а затем ! и новая строка. Если у вас нет звонков на sleep() или другие трудоемкие функции в prog1 , этот вывод должен прийти довольно быстро.

    Затем запустите prog1 | туалет -с . Он должен отображать информацию о вашем состоянии stderr, как упоминалось выше, за которым следует 100000 или 102400 или сколько байт вы записали в стандартный вывод. (Это будут выходные данные wc -c , сообщая, сколько байт он прочитал со своего стандартного ввода (канала).)

  2. Изменить вторую программу на сон 10 или 20 секунд до того, как он начнет читать.

    Чтобы проверить это, снова запустите prog2 < jon_file.txt . Очевидно, он должен сделать паузу на время вы указали в своем sleep() , а затем отобразить содержимое файла и выйти (вернуть вас в приглашение оболочки).

Теперь запустите prog1 | prog2 > /dev/null . Но, прежде чем вы это сделаете, вы можете попытаться угадать, что произойдет.

    ︙

    ︙

    ︙

Я ожидаю, что он напечатает несколько точек — может быть, 8, может быть, 64 или 65, может быть, какое-то другое число — а потом пауза, потом остальные точки и ! . Это потому, что prog1 может начать запись сразу, даже если prog2 еще не читает. Канал может хранить данные до тех пор, пока prog2 не будет готов начать чтение — но только до определенного момента. Канал имеет предел буферизации. Это может быть 8000 (или 8192), 64000 (или 65536) или какой-либо другой номер. Когда канал заполнится, система заставит prog1 ждать. Когда prog2 начинает читать , он сливает трубу; это освобождает место для канала, чтобы хранить больше данных, а так прог1 разрешено снова начать писать.

Если вы сначала не видите описанного выше поведения, попробуйте увеличить числа: 200 000 байт, 30 секунд и т. д.

Так что ваш учитель был отчасти прав когда он раскритиковал первый набросок вашей программы. (Или, возможно, он был совершенно прав, а вы неправильно его процитировали.) Как вы понимаете, та версия программы ждал runcmd(pcmd->left) программа (запись канала) для завершения, а затем запустится runcmd(pcmd->right) (считыватель каналов). Но что, если левая программа выведет 100 000 байт? Он заполнит трубу, а затем подождет, пока сможет написать еще немного. Но больше написать не получится пока «кто-то» не прочитает из канала и не истощит буфер хранения. Но основная программа не запускает считыватель каналов пока трубописец не закончит. Все ждут, пока кто-то другой что-то сделает, чего они не сделают, пока первый парень не сделает что-то. («Я дам тебе камень, как только ты дашь мне деньги». / «Нет, Я дам тебе деньги после того, как ты отдашь мне драгоценный камень.") Так что да; Итог: если данные перестали двигаться по каналу потому что он был заполнен и ни один процесс не читал из него, то оба процесса будут бесконечно зависать.

Такого рода ситуации известны небрежно, культурно, как Уловка-22 . В информатике это формально называется тупиком, неофициально называется смертельным объятием.

сценарий оболочки - Завершить анонимный канал при завершении "выходного" процесса

спросил

Изменено 2 года, 9 месяцев назад

Просмотрено 467 раз

Допустим, у меня есть что-то подобное в сценарии оболочки

command1 | команда2

Теперь, как я могу сделать так, чтобы команда2 завершалась, когда команда1 выход?

Редактировать:

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

Вот: эхо-тест | xmobar

И я думаю, что это может быть использовано в качестве замены для xmobar , а также

 #!/bin/sh
пока :; делать :; сделанный
 
  • сценарий оболочки
  • корпус
  • процесс
  • труба

8

Этот комментарий объясняет, как программы завершаются (или нет), когда другой конец канала закрывается:

Закрытие канала в command1 command2 вообще ни о чем не говорит. Ничего не происходит, пока command2 не прочитает канал, не очистит его и не получит EOF. Даже в этом случае ему не нужно выходить, если у него есть еще работа. Аналогично, если command2 выходит первым, command1 не узнает об этом, пока не напишет в пайп, после чего получает SIGPIPE . Если он поймает это, он тоже сможет продолжить другую работу.

Вот что может произойти автоматически. Теперь ваш вопрос:

 команда1 | команда2
 

Как я могу сделать так, чтобы команда2 завершалась при выходе из команда1 [даже если команда2 не замечает или не хочет завершаться]?

Если ваша оболочка запускает конвейер в отдельной группе процессов, попробуйте уничтожить всю группу. Например. Bash делает это, когда включено управление заданиями ( set -m ). Он включен по умолчанию для интерактивных оболочек (в системах, которые его поддерживают), но не для сценариев.

Пример кода:

 #!/bin/bash
установить -м
( команда1; kill -s INT 0 ) | команда2
 

Весь конвейер запускается в отдельной группе процессов с PGID (идентификатором группы процессов), равным PID самой первой части, которая в данном случае является подоболочкой. kill 0 посылает сигнал своей группе процессов. Таким образом, мы сигнализируем command2 сразу после завершения command1 .

Примечания:

  • В Bash kill является встроенным, поэтому kill в примере не является отдельным процессом с назначенными PID и PGID. Поэтому фраза «собственная группа процессов» выше не является строгой, это должна быть «группа процессов подоболочки». Это по-прежнему именно та группа процессов, которую мы хотим использовать. убить 9Можно использовать встроенный 0010 или /bin/kill , подойдет любой.
  • command2 может изменить свою собственную группу процессов. Если это так, решение не будет работать.
  • Почти для всех сигналов command2 может игнорировать сигнал или обрабатывать его практически любым способом. Выберите сигнал, который соответствует вашим потребностям.
  • Вызов kill сразу после завершения command1 может быть слишком ранним.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *