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.
|