![]() |
Пред. тема | След. тема | ||
Форум Программирование под UNIX (Shell скрипты) | |||
---|---|---|---|
Изначальное сообщение | [ Отслеживать ] |
"Параллельное исполнение в bash" | +/– | ![]() |
Сообщение от Аноним (0), 08-Окт-20, 19:15 | ||
С год назад хотел организовать параллельное исполнение, но что-то не вышло, и я оставил всё на одном ядре. Очень медленно. Как лучше его сделать? Хотя бы без синхронизации (синхронизация фоновых жобов развлечение ещё то, не хочу городить грязь, где она не нужна). | ||
Ответить | Правка | Cообщить модератору |
Оглавление |
Сообщения | [Сортировка по ответам | RSS] |
1. Сообщение от Аноним (1), 08-Окт-20, 19:41 | –3 +/– | ![]() |
Как лучше сделать? Загуглить решение, очевидно же. Научиться гуглить и читать документацию. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #2 |
2. Сообщение от Аноним (0), 08-Окт-20, 19:42 | +/– | ![]() |
> Как лучше сделать? Загуглить решение, очевидно же. Научиться гуглить и читать документацию. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #1 Ответы: #7 |
3. Сообщение от Licha Morada (ok), 08-Окт-20, 20:55 | +/– | ![]() |
> С год назад хотел организовать параллельное исполнение, но что-то не вышло, и | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #4 |
4. Сообщение от Аноним (0), 08-Окт-20, 21:10 | +/– | ![]() |
Мне нужен раздельный вывод (т.е. табы или разделить одно окно и пулять выхлоп каждого процесса раздельно), мне нужно произвольное число процессов (по числу ядер). Это основное. Если синхронизация только в родительском процессе, нужно контролировать статус фоновых процессов и опционально управлять ими посредством сигналов (достаточно будет получить код завершения, текстовый ipc через фс я уже сделал и тут мне не нужно передавать данные между процессами). Управление фоновыми процессами через job/wait показалось мне очень не надёжным, как пример, после завершения родителя порождённые процессы не спешат умирать и нет никакой возможности узнать их пиды для убийства (я решил этот вопрос, но не совсем так, как хотелось бы), постоянные проблемы с состоянием гонки и синхронизацией (необходимо это учитывать, если где-то в процессе исполнения возникла ошибка). | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #3 Ответы: #5, #6 |
5. Сообщение от Аноним (0), 08-Окт-20, 21:32 | +/– | ![]() |
Да, от файлов с выводом, который я буду читать в основном процессе, тоже хотелось бы отказаться в идеале, я правда не представляю как. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #4 |
6. Сообщение от Аноним (1), 08-Окт-20, 22:36 | +/– | ![]() |
Чтобы такое сделать, вам нужно книжку по шелл-скриптингу прочитать. На самом деле только научиться перенаправлять вывод. Например, ./run > file$x.out & | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #4 Ответы: #8, #9 |
7. Сообщение от Аноним (1), 08-Окт-20, 22:37 | +/– | ![]() |
Это проще, чем побираться по форумам. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #2 Ответы: #10 |
8. Сообщение от Аноним (0), 08-Окт-20, 22:43 | +/– | ![]() |
Невозможно узнать идентификаторы потомков потомка, если только они сами не запишут их в какой-нибудь файл. Давайте по существу. И мне нужен выводу в реальном времени, а не после завершения. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #6 Ответы: #11 |
9. Сообщение от Аноним (-), 08-Окт-20, 22:43 | +1 +/– | ![]() |
| ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #6 |
10. Сообщение от Аноним (0), 08-Окт-20, 22:45 | +/– | ![]() |
> Это проще, чем побираться по форумам. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #7 |
11. Сообщение от Аноним (1), 09-Окт-20, 03:42 | +/– | ![]() |
> Невозможно узнать идентификаторы потомков потомка, если только они сами не запишут их | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #8 Ответы: #12 |
12. Сообщение от Аноним (0), 09-Окт-20, 04:13 | +/– | ![]() |
Извините, а где я кого-то учил? И из чего можно сделать выводы о моей компетенции? Вот о Вашей уже сложилось определённое мнение на основании ответов в данной теме. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #11 Ответы: #13 |
13. Сообщение от Аноним (1), 09-Окт-20, 11:45 | +/– | ![]() |
> Извините, а где я кого-то учил? | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #12 Ответы: #15 |
14. Сообщение от system (??), 09-Окт-20, 15:33 | +/– | ![]() |
> С год назад хотел организовать параллельное исполнение, но что-то не вышло, и | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #16 |
15. Сообщение от Аноним (0), 09-Окт-20, 19:05 | +/– | ![]() |
> Ну вот же вы утверждаете, что нельзя узнать пид, если он не | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #13 Ответы: #22 |
16. Сообщение от Аноним (0), 09-Окт-20, 19:16 | +/– | ![]() |
Это заявка на победу, я думаю, стоит уже взять parallel в таком случае. Но мне хотелось бы решить это без perl. Я могу всё это сделать красиво в python, там и ipc есть нормальный, и самые разные варианты запускать процессы, но задача обойтись средствами баша. Собственно, в ОП перечислен алгоритм моего питон однострочника запускающего окно и направляющего выводы youtube-dl в него. Там проблема, что он запускался только под conemu, а мне сейчас нужно что-то более универсальное (хотя вариант с konsole готов рассмотреть, хотелось бы переключать на соседний таб с разделением на области, но, полагаю, принудительный запуск дополнительного окна с tmux тоже не плохой вариант). | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #14 Ответы: #17 |
17. Сообщение от pavel_simple. (?), 09-Окт-20, 19:23 | +/– | ![]() |
> Это заявка на победу, я думаю, стоит уже взять parallel в таком | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #16 Ответы: #18 |
18. Сообщение от Аноним (0), 09-Окт-20, 19:49 | +/– | ![]() |
> xargs + screen/tmux | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #17 Ответы: #19 |
19. Сообщение от Аноним (0), 09-Окт-20, 20:06 | +/– | ![]() |
В связи с чем вопрос. Можно ли как-то подцепить вывод форка себя (и автоматом всех потомков форка) к шеллу, запущенному в панели tmux? | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #18 Ответы: #20 |
20. Сообщение от Аноним (0), 09-Окт-20, 20:37 | +/– | ![]() |
> В связи с чем вопрос. Можно ли как-то подцепить вывод форка себя | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #19 Ответы: #21 |
21. Сообщение от Аноним (0), 09-Окт-20, 21:01 | +/– | ![]() |
Форк ведь может переопределить дескрипторы для себя? Это никак не должно затрагивать родительский процесс. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #20 |
22. Сообщение от Аноним (1), 09-Окт-20, 21:56 | +/– | ![]() |
Пиды процессов внуков только через системные утилиты, работающие с процессами. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #15 Ответы: #23 |
23. Сообщение от Аноним (0), 09-Окт-20, 22:32 | +/– | ![]() |
Проблема в том, что "системные утилиты, работающие с процессами", не могут предоставить информации, не имеющейся у ядра. А сканирование всех процессов на предмет ближайшего предка (если он ещё не потерян!) -- это не самое лучшее решение, подверженное всё той же гонке и случайным плавающим багам. Все мои попытки передавать сигнал по цепочке завершились тем, что в одном случае из десяти (или ста), процессы их игнорировали и успешно демонизировались. Перепроектировать логику не получится. Если тот же sleep запущен, он будет продолжать висеть под инитом, пока его не убьют, или он не закончится сам. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #22 Ответы: #25 |
24. Сообщение от Аноним (0), 11-Окт-20, 03:14 | +/– | ![]() |
Какая же гадость этот parallel. Он поддерживает вывод в tmux (казалось бы что ещё нужно!) но запускает при этом 100 раз одновременно и ломает вывод консоли. Ещё и наспамила в консоль своим бредом сначала, автор очевидный аутист. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
25. Сообщение от Аноним (1), 12-Окт-20, 18:42 | +/– | ![]() |
Выдумываете себе проблемы, чтобы потом героически их превозмогать. Сраному скрипту в кроне - нужны данные о процессах уровня ядра! Линукс Торвальдс должен срочно сделать новые апи, чтобы вы смоги решить свои задачи... | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #23 Ответы: #26 |
26. Сообщение от Аноним (0), 12-Окт-20, 19:19 | +/– | ![]() |
Там задача была ждать данные в основном потоке и накапливать, валидировать, и сбрасывать на диск каждые N времени в дополнительном фоновом основываясь на ряде условий. Какой ещё крон? Использовать тут крон это напрашиваться на проблемы -- при убийстве скрипта некому будет его отключить. Полагаю, ваши скрипты очень грязные. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #25 |
Архив | Удалить |
Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема |
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |