|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Edward Muhutdinov 2:5049/91.38 25 Apr 2000 20:50:26 To : All Subject : прибить процесс --------------------------------------------------------------------------------
Операционка - Linux Mandrake 7.0, перл родной. В терминале постоянно висит
задача, с некоторым промежутком времени сканирующая наперед заданный файл. При
появлении в нем строки демон считывает ее, удаляет из файла, и запускает
согласно данной строке долгоиграющую задачу (конкретно - квантовохимический
расчет). Естественно, во время расчета он неактивен, и хотя память занимает...
но немного. По завершении расчета управление ему возвращается, он снова
проевряет файл. Если есть строка - запускает следующую задачу, если нет -
переходит в режим ожидания и с какой-то периодичностью опять сканирует состояние
файла.
Итак, стоит проблема - как прибить этот расчет, не трогая работы самого демона,
при помощи другой программы. Ситуация крайне осложняется тем, что демон
запускается с правами root, и процесс, им вызываемый, тоже root, а прибивание
процесса необходимо производить программой, запускаемой _не_ суперпользователем.
Установка разных флагов на скрипт проблемы не решила, постоянный permission
denied.
Пошел на хитрость - от root'а запускается еще один демон, проверяющий наличие
другого файла, и при его обнаружении успешно прибивающий процесс. Создать
файл-флаг любым пользователем уже проблемы не составляет. Однако здесь
получается такая закавыка, что второй демон уже отъедает ресурсы постоянно, с
какой-то периодичностью просыпаясь и проверяя файл. Hам не хотелось бы терять и
тот мизер, что он забирает.
Родилась идея вместо sleep $secs вызывать просто sleep. Тогда демон по идее
будет ждать alarm, и по просыпанию проверять состояние файла. Более того, в
данном случае файл-флаг ему даже становится не нужен: демон получает сигнал,
сразу прибивает процесс, после чего снова засыпает. Впрочем, флаг можно оставить
для пущей безопасности.
Итак, вопрос: каким образом сделать взаимодействие двух перловских программ, из
которых одна висит постоянно, в режиме sleep, запущенная с правами root, а
вторая запускается по необходимости пользователем с ограниченными правами. Очень
хотелось бы получить непосредственный рецепт с кодом, который нужно вставить в
демона и кодом, который нужно вставить в клиента - в документации и примерах
сегодня копался два часа, ничего конкретного не нарыл.
Гм... А может, как-нибудь можно осуществить прибивание процесса, запущенного
root, программой, запущенной не root? Это был бы самый лучший выход.
Заранее спасибо.
С приветом, Edward M.
--- ДДДmailto:wtiger@mail.ruДДДhttp://wtiger.ncport.ruДДДICQ UIN 9625056ДДДДД
* Origin: Эк тебя скрючило! (2:5049/91.38)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/3414390608ff.html, оценка из 5, голосов 10
|