| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > Помгите создать дочерние процессы |
| Автор: StealtH 4.10.2004, 02:51 |
| Такая возникла трабла, нужно создать несколько дочерних процессов, точнее 255, а создается только 64. С чем это связано, и как это можно исправить. Подскажите пожалуйста, или подкинте ссылочку на документацию, плиз |
| Автор: chaos 4.10.2004, 09:48 |
| Возник вопросик нах тебе столько процессов??? |
| Автор: StealtH 4.10.2004, 10:51 | ||
Ну о-о-о-о-о-чень нужно |
| Автор: GoodBoy 4.10.2004, 11:03 |
| StealtH А ты уверен, что другова пути нет???? |
| Автор: ElectricalStorm 4.10.2004, 13:07 |
| ключевые слова: fork, use threads, use Threads; |
| Автор: StealtH 4.10.2004, 18:04 | ||||
Пробовал делать через дескрипторы файлов, через system, через обратные кавычки, везде один и тотже результат, может это операционка накладывает свои ограничения, если так, то где почитать как с этим бороться. Добавлено @ 18:05
Не помогает |
| Автор: GoodBoy 4.10.2004, 18:06 |
| StealtH Нет, ты не понял!!!!! Опиши задачу!!! Может есть другой путь решения, чем плодить процессы!!!!! |
| Автор: StealtH 5.10.2004, 02:21 | ||
Вообщем суть дела такова. Есть определенный диапазон IP-адресов(большой), который нужно отслеживать на наличие различных сервисов(Apache, фтп, и т.д.). Есть скрипт, который все это прекрасно делает(сам написал), суть работы такова, сначала пингуем хост, а потом производим с ним остальные действия. Т.к. хостов много около 1000, то, нужно, чтоб сервер их пинговал сразу и по многу, т.е. брал маску адреса(типа 192.168.100.) а остальные цифры последнего актета подставлял сам скрипт, и результаты выбрасывал в текстовый файл с именем аналогичным хосту, потом берет из папки с результатами(т.е. файлами результатов пинга) обрабатывает. Почему нужно много и сразу, потому что результаты должны обновлятся через короткие промежутки времени. Пробовал использовать Net::Ping, но результаты пинга больше чем в реале раза в два-три, это(как мне объяснили) результат того, что используются библиотеки перла, которые перед трансляцией подгружаются, поэтому именно из-за этого вариант сразу отпал. Выход единственный - пинговать системной командой, и для этого запускать ее как отдельный процесс. С порождением нужного количества процессов на моем серваке(Linux Interprase)проблем нет, у меня там права рута, но в конечном итоге скрипт будет работать на сервере, где у меня таких прав не будет, да и скрипту их никто не даст(он будет работать с консольном режиме и запускаться через crontab). Поэтому вот и приходится находить другие пути. Вот в принципе практически все. |
| Автор: GoodBoy 5.10.2004, 10:10 | ||||
А теперь представь СКОЛЬКО системных ресурсов тебе надо, чтобы запустить 256 клонов своего скрипта, КАЖДЫЙ из которых запустит свою версию интерпретатора Перл... Ты уверен, что fork 256 процессов - это единственный выход??? |
| Автор: StealtH 5.10.2004, 12:57 | ||
Ну если какой-нить другой выход есть, то подскажи пожалуйста, буду признателен. |
| Автор: GoodBoy 5.10.2004, 13:06 |
| Могу предложить тебе, ну скажем к примеру, запускать 8 или 16 процессов и поделить между ними всё адресное пространство... Тогда и нагрузка на сервер будет не очень высокая и скорость работы возрастёт по сравнению с одним процессом... |
| Автор: Nobody 5.10.2004, 20:43 |
| Эээ... А старый добрый nmap не устраивает? |
| Автор: StealtH 5.10.2004, 20:46 | ||
По подробнее если можно, потому что я с этим не сталкивался, и понятия не имею, или ссылочку где почитать по данному поводу. |
| Автор: GoodBoy 6.10.2004, 10:01 | ||||||
| StealtH Ну смотри, есть у тебя скрипт, который опрашивает удалённый хост. К примеру по крону ты запускаешь 8 экземпляров этого скрипта с параметрами:
а в самом скрипте читаешь начальное и конечное значение последнего сегмента адреса
и дальше простейший цикл:
Таким образом каждый из 8 процессов обработает свои 32 хоста... |
| Автор: StealtH 6.10.2004, 19:00 | ||||||||
Т.е. таким образом постараться объеденить несколько задач в одну, используя входные параметры скрипта. Но тогда при этом, снизится скорость работы скрипта. Вообщем неплохая идея, где про это можно более подробно почитать? |
| Автор: GoodBoy 7.10.2004, 09:50 | ||
Ну, как ты можешь сам догадаться, нельзя одновременно кушать рыбу и карабкаться на дерево... |
| Автор: StealtH 7.10.2004, 13:00 | ||||
Вообщем смысл такой, сервак от количества процессов загнуться не должен(я так думаю), но самое главное точность и скорость, это основной принцип работы скрипта. Да и вот еще маленький ньюанс, скорее я бы даже сказал просьба, подкинь ссылочку, если таковая имеется, на ресурс, где можно почитать про разделение памяти между процессами, если там будут примеры будет ваще рульно, моя признательность не будет знать границ(в будующем сочтемся) Да и еще чуть не забыл, ресурсы не важно, но только вот чтоб траблов с доступом к ним не было в связи с тем, что запускаться скрипт будет не от рута, это тоже не мало важный ньюанс. |
| Автор: GoodBoy 7.10.2004, 13:03 | ||||
тогда запусти 64 процесса, и каждый из них пусть обработает по 4 хоста!!!!
Сорри, не знаю... |
| Автор: StealtH 7.10.2004, 20:24 | ||||||
Ты наверное не понял сути вопроса, мне нужно именно пинг запустить в таком количестве экземпляров, результаты пинга складываются в файлик, а потом сканить порты на запущенные серивы, тоже в несколько потоков. В итоге сервак надрывается меньше минуты и сразу выдает результат.
Я почему так решил, потому-что обработать 200kb(при самом боьшом количестве хостов) гораздо проще и менее ресурсоемко, чем делать это все в каком-то цикле(сначала пинговать, а потом обрабатывать результат) дольше по времени и неизвестно как себя может повести скрипт при каких-либо ошибках(я имею ввиду какую-нить непредвиденную ситуевину, всего ведь не предусмотришь). Системного пинга в чем плюс, в том, что он выводит именно те результаты, которые есть на самом деле, а перловый пинг меня чо-то разочаровал(результаты в 3-4 раза больше чем от системного). Тем более что скрипт будет запускаться кроном и контролировать его работу будет довольно-таки сложно, а в логах его работы потом ковыряться мне особо эта перспектива не прильщает(долго и скучно).
Ну тады Яndex - найдется ф-ф-ф-ф-се |