<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Параллельное исполнение в bash</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html</link>
    <description>С год назад хотел организовать параллельное исполнение, но что-то не вышло, и я оставил всё на одном ядре. Очень медленно. Как лучше его сделать? Хотя бы без синхронизации (синхронизация фоновых жобов развлечение ещё то, не хочу городить грязь, где она не нужна).&lt;br&gt;&lt;br&gt;Один. Нужно просто запускать ещё 1 процесс по процессу на ядро как только завершился предыдущий и пока есть работа.&lt;br&gt;&lt;br&gt;Два. Нужно организовать вывод из всех скриптов, разделить экран по числу ядер в tmux или можно придумать что-нибудь ещё?&lt;br&gt;&lt;br&gt;Жду ваших советов и предложений, спасибо.&lt;br&gt;</description>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#26</link>
    <pubDate>Mon, 12 Oct 2020 16:19:19 GMT</pubDate>
    <description>Там задача была ждать данные в основном потоке и накапливать, валидировать, и сбрасывать на диск каждые N времени в дополнительном фоновом основываясь на ряде условий. Какой ещё крон? Использовать тут крон это напрашиваться на проблемы -- при убийстве скрипта некому будет его отключить. Полагаю, ваши скрипты очень грязные.&lt;br&gt;&lt;br&gt;Но это не имеет никакого отношения к текущей проблеме. Сейчас меня интересует организация красивого вывода с индикацией работы скрипта (без ncurses). Простое &quot;решение&quot; у меня и так есть, это find . -name &quot;*&quot; -print0 &amp;#124; xargs -0 -n 1 -P &quot;$(nproc)&quot; -I &apos;&#123;&#125;&apos; script &apos;&#123;&#125;&apos; однако вывод превращаеся в мешанину. &quot;Классическое&quot; решение это отключить вывод, но меня оно не устраивает.&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#25</link>
    <pubDate>Mon, 12 Oct 2020 15:42:46 GMT</pubDate>
    <description>Выдумываете себе проблемы, чтобы потом героически их превозмогать. Сраному скрипту в кроне - нужны данные о процессах уровня ядра! Линукс Торвальдс должен срочно сделать новые апи, чтобы вы смоги решить свои задачи...&lt;br&gt;&lt;br&gt;Вам нужно запустить какие-то джобы в параллель и обработать их ошибки, если что-то пошло не так. Для этого не нужно никакого IPC при условии правильного проектирования.&lt;br&gt;Если не можете придумать, как это сделать без абсурдных переусложнений - наймите системного администратора. &lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#24</link>
    <pubDate>Sun, 11 Oct 2020 00:14:58 GMT</pubDate>
    <description>Какая же гадость этот parallel. Он поддерживает вывод в tmux (казалось бы что ещё нужно!) но запускает при этом 100 раз одновременно и ломает вывод консоли. Ещё и наспамила в консоль своим бредом сначала, автор очевидный аутист.&lt;br&gt;&lt;br&gt;Ну в принципе вот это наверное, да. Утянул себе нужное, надо закончить и посмотреть, как будет, а то xargs конечно нормально работает, но мешанина вывода совершенно нечитаемая. https://gist.github.com/mlgill/ad2693f17aaa720ef777&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#23</link>
    <pubDate>Fri, 09 Oct 2020 19:32:00 GMT</pubDate>
    <description>Проблема в том, что &quot;системные утилиты, работающие с процессами&quot;, не могут предоставить информации, не имеющейся у ядра. А сканирование всех процессов на предмет ближайшего предка (если он ещё не потерян!) -- это не самое лучшее решение, подверженное всё той же гонке и случайным плавающим багам. Все мои попытки передавать сигнал по цепочке завершились тем, что в одном случае из десяти (или ста), процессы их игнорировали и успешно демонизировались. Перепроектировать логику не получится. Если тот же sleep запущен, он будет продолжать висеть под инитом, пока его не убьют, или он не закончится сам.&lt;br&gt;&lt;br&gt;Вопрос был как организовать и перенаправить вывод в удобоваримом виде, а не как запустить несколько процессов параллельно. Вопрос, как принудительно завершать потомков при (внезапном) завершении мейна мы не рассматриваем, очевидно, что адекватного решения для него в интернете просто нет.&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#22</link>
    <pubDate>Fri, 09 Oct 2020 18:56:54 GMT</pubDate>
    <description>Пиды процессов внуков только через системные утилиты, работающие с процессами. &lt;br&gt;Либо вы шлете сигнал дочке, а она его обрабатывает, делая что-то с внуками. Но проще так не делать и перепроектировать логику.&lt;br&gt;&lt;br&gt;Скрипт, который будет делать то, что вам надо, это примерно строк 10, может быть 20. В нем будут такие вещи, как for in, nproc, &amp;, wait, возможно $!, trap. Отлично гуглятся все вопросы, которые могут возникнуть при написании. Во всяком случае, по-английски все документировано и разжевано.&lt;br&gt;&lt;br&gt;Вам принципиально, чтобы какой-то русскоязычный васёк за вас скрипт написал? Фетиш какой-то? Уже два дня побираетесь, можно было уже пару раз перечитать доку по башу вдоль и поперек.&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#21</link>
    <pubDate>Fri, 09 Oct 2020 18:01:10 GMT</pubDate>
    <description>Форк ведь может переопределить дескрипторы для себя? Это никак не должно затрагивать родительский процесс.&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#20</link>
    <pubDate>Fri, 09 Oct 2020 17:37:14 GMT</pubDate>
    <description>&amp;gt; В связи с чем вопрос. Можно ли как-то подцепить вывод форка себя &lt;br&gt;&amp;gt; (и автоматом всех потомков форка) к шеллу, запущенному в панели tmux? &lt;br&gt;&lt;br&gt;Так, допустим, можно перенаправить все три потока для каждого процесса в именованные трубы (не проверял ввод, но вывод определённо будет работать), т.е. нам как минимум всё ещё необходимо сохранить список дочерних процессов (может и работать, при условии, что те не будут рекурсивно форкать себя и терять потомков), но мы всё ещё подвержены состояниям гонки и неадекватной реакции на сигналы. Тут тут возникает вопрос с тем, что tmux сам по себе и он может обидеться, когда мы начинаем взаимодействовать с шеллом в обход него, т.е. у tmux надо как-то отнять контроль над выводом (вводом) запущенных им шеллов.&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#19</link>
    <pubDate>Fri, 09 Oct 2020 17:06:21 GMT</pubDate>
    <description>В связи с чем вопрос. Можно ли как-то подцепить вывод форка себя (и автоматом всех потомков форка) к шеллу, запущенному в панели tmux?&lt;br&gt;</description>
</item>

<item>
    <title>Параллельное исполнение в bash (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10334.html#18</link>
    <pubDate>Fri, 09 Oct 2020 16:49:50 GMT</pubDate>
    <description>&amp;gt; xargs + screen/tmux &lt;br&gt;&lt;br&gt;Я вспомнил, чем мне не подошёл этот вариант. Там вроде бы можно было только отправлять команду на исполнение в панели, т.е. запуск новых процессов нонстоп (это то, что я использовал в конечном итоге, но тут это не подходит, хотя и можно набросать отдельный однострочник, запускающий этот скрипт -- мне как раз хотелось отказаться от по-файлового исполнения, слишком много времени на запуск уходит, особенно на &quot;нелинуксе&quot;). Либо добавлять текст (вывод) в панель уже после завершения, но нельзя было прицепить stderr/stdout/stdin запущенного процесса (и его потомков) к панели tmux и переключать его на вывод следующего процесса после завершения первого.&lt;br&gt;</description>
</item>

</channel>
</rss>
