Но это запускает prog1, затем ждет, пока prog1 заканчивается, а затем запускает prog2 .
Так как я могу запустить их параллельно?
- Старт prog1 .
- Отправьте его на задний план, но продолжайте печатать вывод.
- Начните prog2 и держите его на переднем плане , чтобы вы могли закрыть его ctrl-c .
- Когда ты рядом prog2 , вы будете возвращаться к prog1 «S переднего плана , так что вы также можете закрыть его с ctrl-c .
Вы можете использовать wait :
Он назначает переменные PID фоновой программы (это PID $! последнего запущенного процесса), затем wait команда ожидает их. Это хорошо, потому что если вы убьете скрипт, он тоже убьет процессы!
Или, если вы предпочитаете:
Если вы хотите иметь возможность легко запускать и уничтожать несколько процессов ctrl-c , это мой любимый метод: порождать несколько фоновых процессов в (…) подоболочке и ловушку SIGINT для выполнения kill 0 , которая уничтожит все, что появилось в группе подоболочек:
как запустить 2 окна или клиента игры.
У вас могут быть сложные структуры выполнения процесса, и все будет закрываться одним ctrl-c (просто убедитесь, что последний процесс запущен на переднем плане, т. Е. Не включайте а затем используя wait встроенную функцию для ожидания завершения всей xargs команды.
BSD / macOS xargs требует, чтобы вы указали количество команд для параллельного запуска в явном виде , тогда как GNU xargs позволяет вам задавать параллельное -P 0 выполнение максимально возможного числа команд .
Выходные данные параллельных процессов поступают по мере их генерации , поэтому они будут непредсказуемо чередоваться .
- GNU parallel , как упомянуто в ответе Оле ( не входит в стандартную комплектацию большинства платформ), удобно сериализует (группирует) вывод для каждого процесса и предлагает множество дополнительных функций.
Перенаправлять ошибки в отдельные журналы.
Есть очень полезная программа, которая вызывает nohup.
nohup сам по себе ничего не запускает в фоновом режиме, и использование nohup не является обязательным или обязательным условием для запуска задач в фоновом режиме. Они часто полезны вместе, но как таковой, это не отвечает на вопрос.
Вот функция, которую я использую для параллельного запуска процесса max n (в примере n = 4):
Если для max_children задано количество ядер, эта функция будет пытаться избежать незанятых ядер.
Вы можете попробовать ppss . ppss довольно мощный — вы даже можете создать мини-кластер. xargs -P также может быть полезен, если вам нужно выполнить партию смущающей параллельной обработки.
Недавно у меня была похожая ситуация, когда мне нужно было запускать несколько программ одновременно, перенаправлять их выходные данные в отдельные файлы журнала и ждать, пока они закончат, и в итоге я получил нечто подобное:
Менеджер процесса порождения
Конечно, технически это процессы, и эта программа должна называться диспетчером порождения процессов, но это только из-за того, что BASH работает, когда он разветвляется с помощью амперсанда, он использует системный вызов fork () или, возможно, clone () который клонируется в отдельное пространство памяти, а не что-то вроде pthread_create (), который бы разделял память. Если бы BASH поддерживал последнее, каждая «последовательность выполнения» работала бы одинаково и могла бы быть названа традиционными потоками, получая при этом более эффективный объем памяти.
Песочница sandboxie или как запустить две программы одновременно
Функционально, однако, он работает так же, хотя и немного сложнее, поскольку переменные GLOBAL недоступны в каждом рабочем клоне, поэтому для управления критическими секциями используется файл межпроцессного взаимодействия и элементарный семафор стада. Формирование от BASH, конечно, является основным ответом здесь, но я чувствую, что люди знают это, но действительно хотят управлять тем, что порождено, а не просто раскошелиться и забыть это.
Это демонстрирует способ управления до 200 экземплярами разветвленных процессов, каждый из которых обращается к одному ресурсу. Ясно, что это излишне, но мне понравилось писать, поэтому я продолжал. Увеличьте размер вашего терминала соответственно. Я надеюсь, что вы найдете это полезным.
Ваш скрипт должен выглядеть так:
Предполагая, что ваша система может выполнять n заданий одновременно. используйте wait для запуска только n заданий одновременно.
Блог про Linux, Bash и другие информационные технологии
Использование фонового режима
Команда будет работать в фоне, при этом из текущей оболочки можно выполнять команды. Таким образом уже можно распараллелить какие-то действия. Можно запустить сразу несколько команд таким образом и дождаться, пока они все отработают. Для ожидания запущенных дочерних процессов используется команда wait.
Эта команда без параметров ожидает окончания работы всех дочерних процессов, соответственно, для ожидания окончания 5 процессов понадобится выполнить команду всего 1 раз. В принципе, это легко реализуется через цикл. Например, так:
И результат работы этого скрипта:
Как видите, с виду одинаковые команды завершились не в том порядке, в котором мы их запустили. Давайте посмотрим теперь общее время выполнения скрипта.
Общее время работы скрипта чуть больше 10 секунд, что доказывает, что наши команды выполнились параллельно, а увеличение времени выполнения говорит о том, что они были запущены не в одно и то же время, были небольшие таймауты между запусками. Но они были очень маленькими, поэтому такой запуск пяти процессов занимает практически такое же время, как запуск одного.
Использование пайпа
Тут важно помнить вот что: если вам не нужно передавать реально какие-то данные между программами, то надо предварительно убедиться, что входные данные эти программы получат в виде опций командной строки и не будут использовать те данные, которые были переданы им с помощью пайпа. Хотя здесь, в принципе, возможен такой вариант:
Параллельное выполнение и ограничение количества фоновых задач в скрипте
Смысл этого скрипта в целом такой: ограничиваем максимально число дочерних фоновых процессов так, чтобы их одновременно было не более 10. Как только один процесс заканчивает свою работу, запускаем следующий. И так далее, пока не выполним 100 фоновых задач. Для порядка отслеживаем в скрипте окончание работы дочерних процессов после запуска последних, только потом заканчиваем работу самого скрипта.
Таким простым способом можно ограничить количество одновременно запущенных фоновых задач в скрипте и при этом отслеживать, сколько из них в данный момент работают. Чтобы было более понятно, запустите скрипт и увидите, когда запускается следующие итерации цикла, и когда изменяется количество дочерних процессов.
Добавить в избранное
Главное меню » Операционная система Linux » Как запустить одновременно несколько команд в Linux
В Linux для выполнения любой задачи, нам необходимо выполнить соответствующие команды на терминале. В случае, если вам нужно больше эффективности, вы можете запускать одновременно несколько команд в Linux. Этот пост быстро научит вас, как мы можем запустить несколько команд в Linux в зависимости от различных ситуаций или условий.
Как запустить несколько команд в Linux в одно и тоже время?
Есть несколько операторов, доступных для запуска несколько команд в Linux в одно и тоже время, такие как «точка с запятой или ;», оператор «логический AND» и оператор «логический OR».
Используйте оператор точку с запятой «;»
Оператор точка с запятой или «;» позволяет запускать несколько команд одновременно в Linux, когда команда отделяются символом «;».
Базовый синтаксис для оператора с запятой:
Не имеет значения, если предыдущая команда успешно или нет. Даже в случае выхода из строя одной команды, следующая команда будет выполнена. Это очень удобно в сценариях оболочки.
Использование логического оператора «»
Иногда нам нужно выполнить вторую команду, только если первая команда успешно завершена в отличие от оператора точка с запятой.
Базовый синтаксис логического оператора:
Пример логического оператора.
В приведенном выше примере мы создали папку или каталог с именем «data» в разделе каталога «/tmp». Так как мы успешно создали каталог /tmp/data, мы можем в состоянии перейдите в каталог «/tmp/data».
Читать Как установить и настроить Fail2ban в Ubuntu 20.04
Для того, чтобы перепроверить это условие, выполните одну и ту же команду еще раз, как показано ниже:
В приведенном выше вывода команды «mkdir /tmp/data» не удалась, так как уже существует. Система не позволяет запускать вторую команду.
Оператор логический AND рекомендуется над оператором точкой с запятой, так как это проверит состояние успеха или неудач предыдущей команды. Чтобы объяснить это, давайте рассмотрим пример.
- Перейдите в директорию /tmp/data1
- Удалите все файлы в нем.
Здесь, в приведенных выше примере выполнение команды “cd /tmp/data1;rm -rf *” параллельно привело к катастрофе, так как на системном каталоге /tmp/ data1 не существует, и поэтому вместо того, чтобы удалять файлы в /tmp/ data1/, будут удалены все наши файлы в текущем рабочем каталоге, которые находятся в /tmp/data. Чтобы избежать такой ситуации используйте ниже команды с логическим оператором “cd /tmp/data1 rm -rf *”.
Здесь вторая команда не удалось, так как первая команда тоже не удалось.
Использование логического оператора OR «||»
Читать Как использовать пробелы в именах файлов в Linux
Основной синтаксис для логического оператора OR:
Пример логического оператора OR.
Объединение нескольких оператор для выполнения нескольких команд в Linux
Как использовать два приложения одновременно на устройствах Samsung Galaxy
С одним из последних обновлений фирменной оболочки интерфейса Samsung One UI, компания привнесла немало позитивных изменений. Но при этом довольно сильно была усложнена функция многозадачности. Ее все еще можно использовать. К счастью, есть несколько способов использовать два приложения одновременно на смартфонах Galaxy S10 и вообще любом другом устройстве Samsung.
Способ подходит не только для уже упомянутого Galaxy S10, но и для S9, S8, Note 9, Note 8 и вообще любого смартфона с установленным пользовательским интерфейсом One UI.
Как использовать многозадачность. Способ 1
Как упоминалось выше, Samsung изменила способ доступа пользователей к функции разделения экрана, чтобы использовать два приложения одновременно. Для этого вам нужно сделать несколько простых шагов.
- Для начала запустите оба приложения, которые вы хотите использовать вместе.
- Откройте меню «Недавние», а затем нажмите на значок любого приложения, которое вы хотите использовать в режиме разделения экрана.
- Затем нажмите «Открыть в режиме разделения экрана». Эта опция будет доступна, только если приложение поддерживает многозадачность. В противном случае функция отображаться не будет.
Как использовать многозадачность. Способ 2
Есть и другой способ использования режима разделенного экрана. Второе приложение при этом будет запускаться во всплывающем окне.
- Запустите приложение, откройте меню «Недавние».
- Нажмите на значок приложения.
- Из списка опций нажмите «Открыть во всплывающем окне».
- Теперь приложение откроется во всплывающем окне.
- Вы можете перетащить приложение в любом месте экрана, и даже сможете изменить размер приложения. Далее просто запустите второе приложение.
Как использовать многозадачность. Способ 3
Если же вы часто используете два определенных приложения одновременно, то Samsung позволяет упростить эту задачу, создав пару.
-
Перейдите в «Настройки». Выберите экран Edge, а затем выберите пункт Edge panels. Включите эту функцию.
Еще больше новостей вы можете узнать в нашем канале в Телеграм.
Теги
- Galaxy S10
- Samsung Galaxy
Источник: androidinsider.ru
Как запустить сразу два приложения в программе Visual Studio?
В этой статье я хотел бы показать Вам, как можно сразу запустить два приложения в программе Visual Studio. С данной задачей Вы можете столкнуться, например, при разработке приложений работающих на сетевых сокетах, когда для проверки работы программы требуется запустить сразу два приложения: клиент и сервер. Но, по умолчанию в режиме отладки Visual Studio позволяет запустить только одно из них.
И так, предположим, что у нас есть решение (Solution), которое содержит два проекта: Example1 и Example2. Обычно, если в решение содержится несколько проектов, то при запуске приложения в режиме отладки, будет запущен тот проект, который имеет отметку startUp project. Его имя обычно выделено жирным цветом в окне Solution Explorer.
Если сейчас нажать на кнопку F5 или Ctrl+F5, то начнётся стандартный процесс сборки и компиляции файлов, в результате чего будет запущено приложение Example1.
Если же мы хотим, чтобы при нажатии на одну из этих кнопок запускалось приложение Example2, то нам нужно в окне Solution Explorer сначала выделить второй проект, а затем, нажав на нём правую кнопку мышки, в появившемся меню нажать на пункт: Set as StartUP Project.
Нажимаем на кнопку F5, теперь открывается второе приложение.
Как видно по отдельности запускать приложения для отладки не сложно, но что делать, если требуется запустить сразу два приложения?
Запуск двух приложений
В окне Solution Explorer выделите текущее решение (Solution) и нажмите правую кнопку мыши. В появившемся меню нажмите на пункт Properties.
Появиться окно настроек или свойств текущего решения. Выберите пункт StartUp Project. Обычно данный пункт меню уже выбран по умолчанию, поэтому, скорее всего, Вам не потребуется ничего выбирать.
В этом меню есть три пункта, давайте рассмотрим каждый из них.