Гость Опубликовано 24 декабря, 2002 Жалоба Опубликовано 24 декабря, 2002 Управление работам (процессами)! Общая постановка задачи такая: необходимо организовать и постоянно поддерживать несколько telnet сессий одновременно. (Если точнее не просто telnet, а tn3270). Кроме того, необходимо иметь к ним программный доступ. (Отправлять и команды и получать ответы на них из приложения написанного на shell (bash, sh ...). Как разовая, эта задача не сложная и она решена. Но она решена в виде одного программного модуля. Т.е. внутри одной программы (процесса) выполняется запуск терминала, установка соединения, передача команд, получение ответа и разрыв соединения. Однако на запуск терминала и установку соединения уходит достаточно много времени. Поэтому хотелось бы один раз запустить в фоновом режиме (background) терминал и установить соединение, а затем каждый раз подключаться к этому процессу. И здесь возникают вопросы. 1. Каким образом можно управлять процессами (точнее работами Job) программно. Ведь команды управления работами (fg, bg, jobs ....) работают с номерами работ, а не с PID (номерами процессов). И эти номера работ, доступны только в том экземпляре shell (процессе) , в котором они запущены. Существуют ли команды, аналогичные fg , bg но работающие с процессами (pid ) ? Или как программно получить доступ к номерам работ ? 2. Возможно ли переподключение процессов к уже открытому соединению (pipe)? Я делаю так: cоздаю временный файл (fifo) и перенаправляю туда ввод и вывод запущенного в фоновом режиме (&) процесса. Затем, в нужный момент подключаюсь к этому файлу другим процессом. Это работает нормально, поскольку pipe активизируется, когда она "открыта" с двух сторон. Но это работает только один раз. Возможно ли отключить второой процесс и подключить вместо него другой ? Заранее благодарен, если Вы сможете мне чем либо помочь. Vi Цитата
AndreyMust19 Опубликовано 11 апреля, 2009 Жалоба Опубликовано 11 апреля, 2009 Цитата: 1. Каким образом можно управлять процессами У процесса есть GID, идентификатор группы, которой он принадлежит. Я так думаю, что это число ассоциируется с заданием (job, или "работа", как ты сказал). Задание - это всего лишь группа процессов, наследующие общие привилегии, как я понимаю. Единственный способ работать с заданиями - узнавать GID процесса вручную и тем самым определять - принадлежит он нашему заданию или нет. Цитата: 2. Возможно ли переподключение процессов к уже открытому соединению (pipe)? Цитата: Возможно ли отключить второой процесс и подключить вместо него другой ? Думаю, что проблем быть не должно - 2-ой процесс закрывает чтение из pipe, а новый процесс открывает его для чтения. Знаю еще что, что файл можно открыть с флагом "не закрывать после exec". При вызове exec этот файл остается открытым и достанется запущенной программе. Может это как-то поможет. P.S. Я нуб в программировании для UNIX и может в чем-то ошибаюсь. Цитата: Но это работает только один раз. Не понял. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.