cнова форк

NullPointer

Новичок
cнова форк

скрипт-демон (while(true) {./*pcntl_fork тута*/..})

внутри форкаю скрипт
в чилде меняю глобальные переменые(точнее конфы, кот задаются до цикла)
в конце кода чилда делаю exit();(т.е. убиваю его), и в паренте, всё что я наменял в чилде, не видно( как будто чилд похерил это вместе со своей смертью(

как быть?
 
точнее я не доконца знаю как он работает)

вообщим такая ситуация.
внутри цикла идёт ожидание клиента(сокет-демон), потом скрипт форкается, парент сидит курит, ждёт пока завершится чилд.
а в чилде собствено вся соль: там несколько условий, в итоге которых вызывается одна и таже функция, в конце которой и убивается чилд(то есть после первого вызова этой функции мне надо рвать конект с клиентом (перескакивать на ожидание следущего клиента), для чего я придумал создавать чилда, и убивать его в конце моей функции)
 
Все переменные дочернего процесса живут отдельной жизнью... Это отдельный процесс, вообще..

Меняй что хочу, родителя это не касается.

P.S не очень понял, что ты хочешь получить, т.е пред. мессагу
 
понял, но а как их передать родителю?
RE: PS::

код типа
Код:
if ($_GET['act']=='a') msg("action a");
if ($_GET['act']=='b') msg("action b");
msg("no action or bad action");
...

криво, но что есть...
просто есть уже готовый код, хочу его демонизировать, раньше код работал адекватно при вызове msg(), т.е. завершался на первом же вызове, теперь же - он вызовится 2 раза(при $_GET['act']=a||b)
 
Передать можешь статус возврата. Остальное - это меж-процессная коммуникация, вряд ли оно тебе реально надо...

System V функции для этого полезны, очереди сообщений и т.п.
 
я правильно понимаю, что для того, чтобы закрыть сокет, вы создаете ещё один процесс, который потом убивается?
а просто закрыть - не катит?..
 
то есть если делать без форка- и если в конце msg() будет exit() то убивается весь демон(((

думал ещё над вариантом типа goto, но кроме патча ничего не нашёл
 
просто есть уже готовый код, хочу его демонизировать, раньше код работал адекватно при вызове msg()
ага...
ну, вообще такая задача легко решаема.
однако - заставлять работать кривой код подобным образом - нельзя.
потому нужно не извращаться, а просто сделать его некривым.
 
код не мой, онлайн игра, которая была скачана из нета, грузила сервер ппц как(каждое обновление читала, писала файл в 300кб)

Амулет дракона(WAP), может слышали
 
ох...
1. попробовать по-человечески - заменить exit на выброс исключения, поймать его, и не забыть удалить весь появившийся глобальный мусор.
но если скрипт очень кривой, занимаемая память может все равно быстро расти.
2. по-дурному (fork). один из самых простых вариантов - передавать через named pipe ([m]posix_mkfifo[/m]).
наример, делать запись либо перед exit, либо - если не отлавливается - через [m]register_shutdown_function[/m].
+ [m]serialize[/m]/[m]unserialize[/m].
 
вот вот, сериалайз та и вешает сервер из дефолтного движка, т.к. там игровой массив сначала сериалайзится, потом записывается в файл
а я хотел не делать этого, чтобы массив висел всё время в памяти, и иж изредка делался бекап

mkfifo- не хотелось бы вообще чего либо писать на диск(

-~{}~ 26.03.07 01:10:

уже подумываю переписать игру
и раз уж буду переписывать- то либо жаба либо Си(клиент на пхп)
 
mkfifo- не хотелось бы вообще чего либо писать на диск
а с чего вы взяли, что данные будут писаться на диск?..
а я хотел не делать этого, чтобы массив висел всё время в памяти, и иж изредка делался бекап
мне понятно из этого только одно - вы сами плохо понимаете, что нужно делать, что оптимизировать и как именно.
хотите в слепую тыкаться - ok, только хватит глупости спрашивать.
мы-то тем более в ваших драконах ни бум-бум.

P.S. как обычно, исходный вопрос ничего общего с исходной проблемой не имел. как они надоели...
 
я у вас спросил одно- вы на это мне ответа не дали, а начали говорить какой я нуб и ничего не понимаю(да это проще чем объяснить как передавать данные между потоками, согласен)
 
NullPointer
1. вам это не нужно. вы изначально занимаетесь дурью, не знаете причину нагрузки, и занимаетесь ошибочной оптимизацией.
2. я изложил вам тот способ, который вы в состоянии адекватно понять. но в силу п.1 - зря.
 
ну-ну я смотрю вы 2 года вели проект амулет дракона и хорошо знаете что создаёт нагрузку.
 
Сверху