on

Выполнение команды на другом узле или tty (QNX Neutrino)

Синтаксис:

on [-C номер_ЦП] [-d] [-h] [-n|f имя_узла] [-P]

[-p приоритет[политика]] [-R процессорная_маска] [-s]

[-t терминал_ввода_вывода] [-u пользователь | -l имя_пользователя] [-W количество_секунд]

[-w устройство] [-Xкоманда_диспетчеризации] [команда [аргументы]]

Поддерживаемые платформы:

Neutrino

Опции:

-C номер_ЦП

(QNX Neutrino Core OS 6.3.2 и выше.) Установить привязку ЦП к номеру номер_ЦП, где первому ЦП задан номер "0". Эту опцию можно использовать многократно. Для получения дополнительной информации см. "Установка процессорной маски" далее.

-d

Отсоединить команду, указанную в аргументе команда, от родительского процесса (т.е. разорвать отношения родительский/порожденный элемент). Эту опцию целесообразно использовать для процессов, созданных удаленно, которые никогда не завершаются и для командного интерпретатора, соответственно, отсутствует необходимость их ожидания. Если эта опция не указана, создается сетевое соединение, соединяющее родительский и порожденный элементы.

-f имя_узла

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

-h

Запустить команду, указанную в аргументе команда, в состоянии HELD. Эту опцию целесообразно использовать для запуска программ с целью их отладки. Также можно запустить несколько команд в состоянии HELD, после чего отправить им сигнал запуска – поскольку время загрузки для них устранено, все команды запустятся практически одновременно.

-l имя_пользователя

Войти в систему с указанным именем пользователя. Эта опция аналогична опции -u, но также устанавливает переменные среды LOGNAME, HOME и SHELL, устанавливает для утилиты umask значение 022 и осуществляет переход в каталог, указанный для пользователя в базе данных паролей.

-n имя_узла

Выполнить команду, указанную в аргументе команда, на удаленном узле с именем имя_узла.

-P

(QNX Neutrino 6.4.0 и выше.) Породить процесс, установив флаг SPAWN_PADDR64_SAFE для подтверждения безопасности 64-разрядной адресации для выполнения процесса либо отсутствия значимости местоположения физической памяти для процесса.

-p приоритет[политика]

Выполнить команду с заданным приоритетом, дополнительно изменив политику диспетчеризации.

Приоритеты находятся в диапазоне от 0 до 255. Приоритет с номером 0 используется для незанятого потока. По умолчанию приоритеты с номерами более 64 относятся к категории привилегированных и могут использоваться только процессами с нулевым эффективным идентификатором пользователя (т.е. root). Приоритеты от 1 до 63 доступны процессам с идентификатором пользователя root и с идентификатором, отличным от root.

Диапазон привилегированных приоритетов можно изменить с помощью опции -P для утилиты procnto.

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

-R процессорная_маска

(QNX Neutrino Core OS 6.3.2 или выше.) Установить привязку ЦП к маске процессорная_маска. Эту опцию можно использовать многократно для установки масок, длина которых превышает 32 бита. Для получения дополнительной информации см. раздел "Установка процессорной маски" далее.

-s

Породить команду в новой группе процессов.

-t терминал_ввода_вывода

Открыть указанное имя терминала в виде файловых дескрипторов 0, 1 и 2 для команды, указанной в аргументе команда. команда выполняется в новом сеансе, в качестве управляющего терминала используется терминал_ввода_вывода (tty). Если значение терминал_ввода_вывода не содержит косой черты (/), то в начало добавляется /dev/.

-u идентификатор_пользователя[:идентификатор_группы [,идентификатор_группы,…]]
-u имя_пользователя

Запустить с именем пользователя, определенным цифровым значением идентификатор_пользователя (uid), принадлежащим указанной группе или группам, или с указанным именем имя_пользователя.

-W количество_секунд

Количество секунд ожидания устройства, которое указано в следующей опции-w. Значение по умолчанию – бесконечное ожидание.

-w устройство

Ждать успешного выполнения утилиты stat() на устройстве, указанном в аргументе устройство перед продолжением. Если значение устройство не содержит косую черту (/), то в начало добавляется /dev/.

Примечание
. Опции -w и -W можно повторить в командной строке. Они обрабатывается в указанном порядке, до обработки других опций.

-X команда_диспетчеризации

Запустить с использованием указанной команды для внешнего диспетчера. Возможные команды: Эта опция была добавлена в QNX Neutrino Core OS 6.3.2.

команда [аргументы]


Выполняемая команда и передаваемые ей аргументы.

Описание:

Утилита on расширяет возможности создания процессов командным интерпретатором (sh). Процесс можно запустить на удаленном узле, на другом управляющем терминале, в состоянии HELD для отладки или последующего синхронизированного запуска.

Если опция -d не указана, то сетевое подключение создается в качестве локального агента для удаленного порожденного процесса. По завершении работы порожденного процесса, родительский процесс должен выполнить функцию wait() в отношении созданного сетевого подключения, чтобы освободить порожденный процесс - "зомби". Если опция -d указана, команда отсоединяется от родительского процесса. Родительский процесс не в состоянии выполнить функцию wait() для порожденного процесса и не может управлять им при помощи сигналов.

По умолчанию команда выполняется в текущем сеансе. Опция -t начинает новый сеанс, что означает, что команда не получит SIGHUP в случае завершения работы лидера текущего сеанса.

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

Установка процессорной маски

В многоядерной системе можно использовать процессорную маску для определения процессора, на котором будет выполняться поток или процесс. Значение по умолчанию – "все 1" (т.е. все ЦП).

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

Утилиту on можно использовать для установки процессорной маски или маски наследования для нового процесса; для изменения масок уже запущенных потоков необходимо использовать утилиту slay. Обе команды одинаково интерпретируют опции -C и -R.

Для установки процессорной маски длиной более 32 битов можно использовать несколько опций -R. Первая опция -R задает биты от 0 до 31, вторая – от 32 до 63 и т.д.

Если опции -C и -R используются совместно или указываются в нескольких экземплярах, то полученная маска является результатом побитовой операции ИЛИ для всех опций -C и -R. Например, on -R 0x1 эквивалентно on -C0, а on -R 0x1 -C3 эквивалентно on -C0 -C3. Команда on устанавливает для процессорной маски и маски наследования процесса одинаковые значения.

Для получения дополнительной информации о процессорных масках см. главы Multicore Processing ("Многопроцессорная обработка") в руководстве по системной архитектуре и Developing Multicore Systems ("Разработка многоядерных систем") в «Руководстве системного программиста (администратора)» КПДА.10964-01 32.

Примеры:

Выполнение утилиты login на консоли 2:

on -t con2 login

Выполнение утилиты who на узле 3:

on -n 3 who

Выполнение утилиты sort в качестве порожденного процесса без родительского на узле с именем peterv:

on -d -n peterv sort file.dat

Выполнение утилиты who на узле 7 с новым сеансом, стандартный ввод/вывод утилиты подключен к консоли 1 на узле 3:

on -t //3/dev/con1 -n7 who


Статус завершения:

Утилита on завершает работу со статусом завершения команды, указанной в аргументе команда.