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) в Справочнике администратора.
СЮРПРИЗЫ
При переключении между экземплярами опережающий ввод
обрабатывается не всегда так, как можно ожидать. До тех
пор, пока не выполнится реальное переключение и пользователь не увидит соответствующее приглашение, весь опережающий ввод направляется текущему экземпляру. Не видя
приглашения, нельзя гарантировать, что ввод попадет по
назначению.
Завершение работы менеджера вызывает посылку сигнала
освобождения линии всем процессам всех групп для каждого существующего экземпляра. Обычно это приводит к завершению всех экземпляров и освобождению всех виртуальных терминалов, которые могут теперь использоваться
другими пользователями. Существует, однако, два случая,
когда после завершения работы с менеджером виртуальные
терминалы не освобождаются:
- Если команда запущена с помощью nohup(1) и стандартный ввод, вывод или протокол назначен на виртуальный терминал, например
nohup who > /dev/sxt/010
- Если сигнал освобождения линии игнорируется
shell'ом (например, после команды trap '' 1).
В обоих случаях виртуальный терминал освобождается
только после завершения процесса, его использующего.
Если менеджер терминируется сигналом SIGKILL (kill -9),
пользователь может оказаться в ситуации, когда для нормального продолжения работы необходимо выйти из системы
и снова войти в нее. Кроме того, экземпляры будут продолжать выполняться до тех пор, пока они не будут явно
терминированы или не произойдет перезагрузка системы.
Пользователи, которые хотят завершить работу с менеджером, не должны использовать SIGKILL.