|
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
|