URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1893
[ Назад ]

Исходное сообщение
"Функция popen, завершение выполнения по тайм-ауту"

Отправлено flyer , 21-Июл-03 14:21 
Кто нибудь знает, как можно по тайм-ауту завершить процесс, порожденный функцией popen? Функция alarm прекращает работу главного процесса и всех потомков, а надо убиватьтолько дочерние процессы.
Возможно кто-то знает как узнать pid процесса порожденого функцией popen.

P.S. Желательно найти решение без использования fork


Содержание

Сообщения в этом обсуждении
"Функция popen, завершение выполнения по тайм-ауту"
Отправлено Alexey , 21-Июл-03 16:04 
вызвать pclose

>P.S. Желательно найти решение без использования fork
а ведь это и есть fork c pipe


"Функция popen, завершение выполнения по тайм-ауту"
Отправлено flyer , 21-Июл-03 16:52 
pclose вызывается в любом случае. Проблема в том, что команда запущенная через popen может зависнуть или выполняться слишком долго. Поэтому нужно убивать этот процесс по тайм-ауту.
А насчет fork, я имел в виду, что можно вызвать fork, а затем в дочернем процессе вызвать popen. При таком подходе можно выставить тайм-аут в дочернем процессе используя функцию alarm. Но в этом случае fork фактически вывзывается два раза. Один раз прямо в программе, другой в popen. Хотелось бы ограничиться только одним fork.

"Функция popen, завершение выполнения по тайм-ауту"
Отправлено Alexey , 21-Июл-03 17:09 
Синхронизируй процессы через полученный канал.
Если через тайм-аут дочерний не пришлет какое-нибудь подтверждение, убиваешь его.

"Функция popen, завершение выполнения по тайм-ауту"
Отправлено flyer , 21-Июл-03 17:22 
Проблема в том, что я открываю канал на запись а не на чтение. К тому же если даже канал был двухсторонний (на чтение и запись), то я не знаю что мне вернет дочерний процесс, так как в дочернем процессе могут запускаться любые комманды (фактически он может вообще ничего не возращать)

"Функция popen, завершение выполнения по тайм-ауту"
Отправлено Alexey , 21-Июл-03 17:54 
Что-то больше ничего пока в голову не приходит.
А может тебе пользоваться отдельно fork, pipe, invoke?

"Функция popen, завершение выполнения по тайм-ауту"
Отправлено flyer , 21-Июл-03 18:10 
Спасибо за совет. Я скачал исходник popen и pclose. Попробую на их основе сделать функции, в которых можно выставить тайм-аут на время выполнения комманды.

"Функция popen, завершение выполнения по тайм-ауту"
Отправлено Мартовский заец , 05-Сен-03 23:17 
>Спасибо за совет. Я скачал исходник popen и pclose. Попробую на их
>основе сделать функции, в которых можно выставить тайм-аут на время выполнения
>комманды.


Ну и как? Удачно??? Сообщи, плиз!