Jump to content

Process & jobs


Guest
 Share

Recommended Posts

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

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

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

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

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

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

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

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

Vi

Link to comment
Share on other sites

  • 6 years later...

Цитата:

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

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

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

Цитата:

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

Цитата:

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

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

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

Цитата:

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

Не понял.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...