Подоболочки Bash и параллельная обработка

click fraud protection

А оболочка это базовый интерфейс для ввода команд на Linux система. С его помощью вы можете ввести команду напрямую или указать файл (скрипт), содержащий последовательность команд, которые должны быть выполнены. Оболочки организованы в иерархию, и любая оболочка может создать новую оболочку. Новая оболочка считается дочерним процессом - подоболочка- родительской оболочки, которая ее создает.

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

разные оболочки Linux

Как создать подоболочку

В сценарии оболочки Bash создайте подоболочку, используя обозначение круглых скобок:

#! / bin / bash
# subshell-example.sh с бесконечным циклом
(
в то время как [1]
делать
echo "Подоболочка запущена.. ."
сделано
)

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

Запуск подоболочки в фоновом режиме

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

#! / bin / bash 
для IP в {1..254}; делать
хост = 192.168.1. $ ip
(пинг -c 1 $ хост> / dev / null
если ["$?" = 0]
тогда
echo $ host
fi) &
сделано

Параллельное выполнение нескольких подоболочек

Если вы создаете несколько подоболочек как фоновые процессы, вы можете запускать задачи параллельно. Обычно операционная система использует разные процессоры или ядра для каждого процесса и подпроцесса, при условии, что количество процессоров или ядер равно количеству процессов. В противном случае задачи назначаются одним и тем же процессорам или ядрам. В этом случае процессор или ядро ​​постоянно переключается между назначенными задачами, пока задачи не будут выполнены.

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

Использование субоболочек

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

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