SHL(1) SHL(1) НАЗВАНИЕ shl - менеджер семейства shell'ов СИНТАКСИС |shl ОПИСАНИЕ Shl позволяет с одного терминала взаимодействовать с семейством shell'ов. Пользователь управляет членами се- мейства, или экземплярами, с помощью команд, описанных ниже. Текущим называется экземпляр shell'а, который может производить ввод с клавиатуры. Другие экземпляры при попытке ввода с клавиатуры блокируются. Выводимая раз- ными членами семейства информация может перемешиваться. Чтобы блокировать вывод экземпляра, который не является текущим, необходимо для этого члена семейства устано- вить опцию loblk в stty. Для передачи управления от члена семейства к менеджеру используется символ-переключатель swtch в stty (обычно CTRL+Z). Приглашением менеджера является >>>, что помо- гает отличить его от члена семейства. Экземпляр shell'а связан с виртуальным терминалом (/dev/sxt/???). Виртуальным терминалом можно управлять так же, как и обычным, с помощью stty(1) и ioctl(2). Каждый экземпляр имеет собственный идентификатор группы процессов. Определение Имя - это последовательность символов, ограниченная пробелом, табуляцией или переводом строки. Значащими являются только первые 8 символов. Имена (1) - (7) нельзя использовать при создании экземпляров: они заре- зервированы менеджером как имена по умолчанию. Эти име- на можно сокращать до одной цифры. Команды Менеджер выполняет следующие команды, которые можно сокращать до минимальной распознаваемости. create [имя] Создать экземпляр с указанным именем и сделать его текущим. Если аргумент не указан, экземпляр будет иметь имя (#), где # - последняя цифра подсоеди ненного к нему виртуального устройства. Переменная PS1 (приглашение экземпляра) получает значение имени экземпляра, за которым следует пробел. Можно создать не более 7 экземпляров. block имя [имя ...] Заблокировать вывод соответствующих экземпляров, когда они не являются текущими. Это эквивалентно установке для экземпляра опции loblk в stty. delete имя [имя ...] Удалить соответствующие экземпляры. Всем процес- сам, имеющим соответствующие идентификаторы груп пы, посылается сигнал освобождения линии SIGHUP [см. signal(2)]. help (или ?) Справка по синтаксису команд shl. layers [-l] [имя ...] Для каждого имени вывести имя экземпляра и иденти- фикатор группы процессов. Опция -l добавляет к вы- воду информацию в стиле ps(1). Если аргументы не указаны, выдается информация обо всех существующих экземплярах. resume [имя] Сделать экземпляр с указанным именем текущим. Если имя не указано, активируется последний из текущих экземпляров. toggle Активировать экземпляр, который был текущим перед последним из текущих. unblock имя [имя ...] Не блокировать вывод соответствующих экземпляров, когда они не являются текущими. Это эквивалентно сбросу для экземпляра опции loblk в stty. quit Закончить работу. Всем экземплярам посылается сиг- нал освобождения линии. имя Сделать экземпляр с указанным именем текущим. ФАЙЛЫ /dev/sxt/??? Виртуальные терминалы. $SHELL Переменная, содержащая составное имя используемого shell'а (по умолчанию /bin/sh). СМ. ТАКЖЕ sh(1), stty(1). ioctl(2), signal(2) в Справочнике программиста. sxt(7) в Справочнике администратора. СЮРПРИЗЫ При переключении между экземплярами опережающий ввод обрабатывается не всегда так, как можно ожидать. До тех пор, пока не выполнится реальное переключение и пользо- ватель не увидит соответствующее приглашение, весь опе- режающий ввод направляется текущему экземпляру. Не видя приглашения, нельзя гарантировать, что ввод попадет по назначению. Завершение работы менеджера вызывает посылку сигнала освобождения линии всем процессам всех групп для каждо- го существующего экземпляра. Обычно это приводит к за- вершению всех экземпляров и освобождению всех виртуаль- ных терминалов, которые могут теперь использоваться другими пользователями. Существует, однако, два случая, когда после завершения работы с менеджером виртуальные терминалы не освобождаются: 1. Если команда запущена с помощью nohup(1) и стан- дартный ввод, вывод или протокол назначен на вир- туальный терминал, например |nohup who > /dev/sxt/010 2. Если сигнал освобождения линии игнорируется shell'ом (например, после команды trap '' 1). В обоих случаях виртуальный терминал освобождается только после завершения процесса, его использующего. Если менеджер терминируется сигналом SIGKILL (kill -9), пользователь может оказаться в ситуации, когда для нор- мального продолжения работы необходимо выйти из системы и снова войти в нее. Кроме того, экземпляры будут про- должать выполняться до тех пор, пока они не будут явно терминированы или не произойдет перезагрузка системы. Пользователи, которые хотят завершить работу с менедже ром, не должны использовать SIGKILL.