Работает сервер Apache/2.2.6 Embedded Perl version v5.8.8
Скрипты perl через mod_perl запускают внешние программы shell через open( "/path/to/prog |" )Бывает так, что эти внешние программы работают очень долго, или просто зависают и пользователи прерывают коннект браузера к серверу кнопкой "стоп". Так вот apache не убивает эти зависшие программы и они остаются висеть в памяти навсегда -- по команде ps видно, что они запущены.
Как это предотвратить, т.е. заставить apache убивать такие программы по таймауту?
Нужно использовать таймаут в нутри скрипта
Таймауты вроде есть в IO::Selectесли прога не закончила выполнение за таймаут, закрываем её хендлер
на всякий случай можно ещё процесс пристреливать, на случай если прога не реагирует на SIG_INT
>Нужно использовать таймаут в нутри скрипта
>Таймауты вроде есть в IO::Select
>
>если прога не закончила выполнение за таймаут, закрываем её хендлер
>на всякий случай можно ещё процесс пристреливать, на случай если прога не
>реагирует на SIG_INTЭто не выход... Нужно иметь возможность убивать процессы средствами самого Apache
>Это не выход... Нужно иметь возможность убивать процессы средствами самого Apacheсам подумал что сказал?
процесс создал потомков, сам же и должен заботиться о том чтоб они дохли вовремя.
а если имеется в виду то что пользователи хостинга делают такие косяки, и какиенить висяки память жрут,
то надо по крону вызывать скриптик и смотреть порожденные от апача процессы, смотреть сколько они работают, и убивать те которые слишком долго работают,
для этого даже перл ненадо знать, можно на баше такой скриптик написать
>а если имеется в виду то что пользователи хостинга делают такие косяки,
>и какиенить висяки память жрут,
>то надо по крону вызывать скриптик и смотреть порожденные от апача процессы,
>смотреть сколько они работают, и убивать те которые слишком долго работают,
>вот такой кривой способ и не хочется использовать... это самый простой и примитивный способ, который сейчас и работает
хочется тоже самое, но средствами сервера