Перейти к содержанию

Process & jobs


Гость

Рекомендуемые сообщения

Управление работам (процессами)!

Общая постановка задачи такая: необходимо организовать и постоянно поддерживать несколько telnet сессий одновременно. (Если точнее не просто telnet, а tn3270). Кроме того, необходимо иметь к ним программный доступ. (Отправлять и команды и получать ответы на них из приложения написанного на shell (bash, sh ...).

Как разовая, эта задача не сложная и она решена. Но она решена в виде одного программного модуля. Т.е. внутри одной программы (процесса) выполняется запуск терминала, установка соединения, передача команд, получение ответа и разрыв соединения. Однако на запуск терминала и установку соединения уходит достаточно много времени. Поэтому хотелось бы один раз запустить в фоновом режиме (background) терминал и установить соединение, а затем каждый раз подключаться к этому процессу. И здесь возникают вопросы.

1. Каким образом можно управлять процессами (точнее работами Job) программно. Ведь команды управления работами (fg, bg, jobs ....) работают с номерами работ, а не с PID (номерами процессов). И эти номера работ, доступны только в том экземпляре shell (процессе) , в котором они запущены. Существуют ли команды, аналогичные fg , bg но работающие с процессами (pid ) ? Или как программно получить доступ к номерам работ ?

2. Возможно ли переподключение процессов к уже открытому соединению (pipe)?

Я делаю так: cоздаю временный файл (fifo) и перенаправляю туда ввод и вывод запущенного в фоновом режиме (&) процесса. Затем, в нужный момент подключаюсь к этому файлу другим процессом. Это работает нормально, поскольку pipe активизируется, когда она "открыта" с двух сторон. Но это работает только один раз.

Возможно ли отключить второой процесс и подключить вместо него другой ?

Заранее благодарен, если Вы сможете мне чем либо помочь.

Vi

Ссылка на комментарий
Поделиться на другие сайты

  • 6 лет спустя...

Цитата:

1. Каким образом можно управлять процессами

У процесса есть GID, идентификатор группы, которой он принадлежит. Я так думаю, что это число ассоциируется с заданием (job, или "работа", как ты сказал).

Задание - это всего лишь группа процессов, наследующие общие привилегии, как я понимаю. Единственный способ работать с заданиями - узнавать GID процесса вручную и тем самым определять - принадлежит он нашему заданию или нет.

Цитата:

2. Возможно ли переподключение процессов к уже открытому соединению (pipe)?

Цитата:

Возможно ли отключить второой процесс и подключить вместо него другой ?

Думаю, что проблем быть не должно - 2-ой процесс закрывает чтение из pipe, а новый процесс открывает его для чтения. Знаю еще что, что файл можно открыть с флагом "не закрывать после exec". При вызове exec этот файл остается открытым и достанется запущенной программе. Может это как-то поможет.

P.S. Я нуб в программировании для UNIX и может в чем-то ошибаюсь. Embarassed

Цитата:

Но это работает только один раз.

Не понял.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...