Сценарий оболочки для запуска двух подпроцессов одновременно - PullRequest
1 голос
/ 28 января 2020

Давайте предположим, что в общей сложности 10 подпроцессов, которые я хочу, чтобы мой сценарий оболочки выполнялся. Подпроцесс (т. Е. Процесс, созданный в сценарии оболочки) для простоты называется x1 ... 10. Обычный сценарий оболочки будет иметь 10 строк; давайте предположим, что каждая строка вызывает ./xi. Однако, чтобы максимизировать эффективность, я знаю, что мое оборудование позволяет запускать два подпроцесса одновременно. Поэтому в любой момент времени два из этих процессов должны быть запущены. В тот момент, когда одно сделано, запускается следующее. Никакой порядок не должен предполагаться в том, как они заканчиваются sh, любой порядок хорош, поскольку они предполагаются независимыми. Есть ли элегантный способ сделать это в сценарии оболочки? Обратите внимание, что каждый x1 ... x10 должен выполняться только один раз.

1 Ответ

2 голосов
/ 28 января 2020
seq 10 | xargs -P2 -I{} ./xi
  • seq 10 - выводит 10 цифр. Нас это не волнует.
  • xargs запускает команду для каждого ввода
    • -P2 запускает два процесса одновременно.
    • -I{} заменяет каждый {} в команде для строки ввода. Поэтому просто отбросьте ввод.
    • ./x{} выполните эту команду для каждой строки во входе.

Окончательный ответ: cat myshellscript.sh | xargs -L 1 -I CMD -P 2 bash -c CMD

с файлом myshellscript.sh, подобным этому:

./task-jsuqh
./task-siuww
./task-uqywh
./task-sdqaw
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...