28 Март, 2024, 17:24:02
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
English
Russian
Сайт СВД ВС
Начало
Помощь
Поиск
Войти
Регистрация
Официальный форум СВД Встраиваемые Системы
>
Форум СВД ВС
>
Техническая поддержка
(Модератор:
Андрей Сеньков
) >
Проблема запуска программы на другом узле
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Проблема запуска программы на другом узле (Прочитано 2183 раз)
LH
Ветеран
Сообщений: 345
Проблема запуска программы на другом узле
«
:
24 Декабрь, 2010, 16:15:00 »
Имеются 2 узла сети qnet в QNX6.5 c именами "А1" и "А2".
Программа Prog1(приложение Photon) запускается на узле "А1" и с помощью PtSpawn() запускает программу
Prog2 на узле "А2".
Для этого в PtSpawn() в структуре opts указывается :
opts = PtSpawnDefaults;
opts.options.flags = SPAWN_SETND;
opts.options.nd = netmgr_strtond( "A2", NULL);
До этого места все работает нормально.
Проблема возникает когда ту же программу Prog1 из pterm-консоли узла "А1" запустить на узле "А2":
$on -n A2 Prog1
В этом случае программа Prog1 выполняется на узле "А2" и запускает программу Prog2.
Но Prog2 исполняется не на узле "А2", как ожидалось, а на узле "А1".
Почему так происходит?
Можно запустить на узле А1:
$Prog1 -N A2 -P Prog1
В этом случае первая Prog1 успешно запускает вторую Prog1 на узле
А2, вторая Prog1 пытается запустить Prog2 ( по умолчанию ) на узле А2,
но на самом деле Prog2 начинает работать на узле А1 ?!
P.S.
подобной проблемы (или особенности) с PtSpawn() в QNX4 не наблюдалось...
«
Последнее редактирование: 27 Декабрь, 2010, 20:34:20 от LH
»
Записан
Андрей Панченко
Сотрудник СВД ВС
Опытный пользователь
Сообщений: 106
Проблема запуска программы на другом узле
«
Ответ #1 :
29 Декабрь, 2010, 19:06:41 »
Так происходит из-за того, что Вы не сменили корневую директорию.
В результате Prog1, запущенный на A2, ищет id узла A2 на узле A1. Так получается, что id узла A2 на узле A1 совпало с id узла A1 на A2 и Prog2 запустилась на A1.
Если же, сменить корневую директорию chroot( "/net/A2" ), то Prog2 действительно запустится на узле A2.
Нужно учитывать, что в первом случае (без chroot()) Prog1 и Prog2, ищутся на первом узле, а после chroot( "/net/A2" ) будут искаться на втором узле.
Что касается утилиты on, то у неё эти два варианта запуска реализуются ключами -n и -f
# on -f A2 Prog1
Записан
Сотрудник СВД Встраиваемые Системы
LH
Ветеран
Сообщений: 345
Проблема запуска программы на другом узле
«
Ответ #2 :
04 Январь, 2011, 17:15:39 »
Я не вполне точно описал проблему с Prog1 и Prog2, в дальнейшем все происходило с "точностью до наоборот",
но Вы все правильно объяснили, спасибо.
Применение chroot() в процессе-ребенке перед netmgr_strtond() не поправляет ситуацию.
Применение chroot() в процессе-родителе перед PtSpawn() действительно помогает, но появляются проблемы.
Prog1 - прототип рабочей программы, которая многократно запускает себя и другие программы проекта на разных узлах.
При повторных применениях chroot() перед PtSpawn() эта ф-ция начинает завершаться с ошибками, в т.ч. с errno=90 "Too many levels of symbolic links or prefixes" .
Как можно посмотреть префикс перед корневой папкой после chroot(), можно ли как-то "нейтрализовать" вызов chroot() для повторного применения? ( chroot(""), chroot("/") не помогают )?
Пока за корректным netmgr_strtond() начал обращаться сообщением к отдельному процессу, запущенному на каждом узле, не очень красиво.
Спасибо.
Записан
LH
Ветеран
Сообщений: 345
Проблема запуска программы на другом узле
«
Ответ #3 :
19 Январь, 2011, 17:49:00 »
Выяснил:
-Посмотреть полный путь можно с помощью realpath().
=Многократно chroot() применять не стоит, т.к. каждый раз происходит
добавление пути к префиксу, т.е. добавления "накапливаются".
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Форум СВД ВС
-----------------------------
=> Информация
=> Техническая поддержка
=> Программное обеспечение
=> Инструментальные средства
=> Обсуждение сайта
=> Курилка
-----------------------------
International Forum
-----------------------------
=> English Discussion
Загружается...