LINUX.ORG.RU

Дочерние процессы


0

0

Как создать несколько дочерних процессов(скажем 3) от одного родительского, так чтобы все они могли принимать от него сообщения и передавать ему ответы?? Заранее Спасибо

anonymous

А что имеется ввиду под сообщениями ??



joker
()

Ну типа некие параметры для дочерних процесов, а от дочернего до родительского-сигнал что потомок закончил работу

anonymous
()

>>Ну типа некие параметры для дочерних процесов
Ну я ваащето ламер, так шо предлагаю ламерский вариант:
када делаешь fork(), получаешь PID потомка. Когда надо передать дочернему процессу параметры, то пишешь эти параметры в какой нить файлик и посылаешь конкретному потомку какой нить сигналец типа SIGUSR1
А в дочернем пишешь обработчик этого сигнала, чтобы он этот самый
файлик и перечитывал.
>>а от дочернего до родительского-сигнал что потомок закончил работу
закончил работу - это умер ???? Или просто выполнил какие-то действия?
В первом случае - потомок сам посылает сигнал SIGCHLD родителю.




joker
()

нет не умер,а просто выполнил действия хотя я еще до конца и не додумал может он как раз и должен умирать,когда все выполнит...

anonymous
()

Если просто один раз передать от родительского дочернему при старте - пользуй переменные окружения, если нужен полный IPC, тогда реализуй его ( см., напр., man perlipc - разные варианты разрисованы в деталях и красках)

PETER ★★
()

вот посмотрите(если ламерно, то не пинайте сильно:-))

if ($pid = fork) { # PERVIJ POTOMOK } else { if ($pid = fork) { # VTOROJ POTOMOK } else { if ($pid = fork) { # TRETIJ POTOMOK } else { #OBCHIJ RODITEL } }

} Верна ли моя логика при создании потомков????

anonymous
()

Посмотрел сам и понял что не верна

anonymous
()

Я ваабчето считаю лучшим такой вариант написания
switch (pid=fork()) {
case -1://error
break;
case 0://parent action
break;
default://child action
}

joker
()

опять промазал !!
всё больше не пишу в форум на работе :))
правильно так
switch (pid=fork()) {
case -1://error
break;
case 0://child action
break;
default://parent action
}

joker
()

Здорово, только на перле свитча нет((( и как всетаки 3 процесса дочерних создать ??? 3 раза в цикле свитч прокрутить?

anonymous
()

fork и Message queues

lg ★★
()

И вообще - читать Стивенса, "Межпроцессное взаимодействие" :)

hbee ★★★★
()

IPC от System V, вообще говоря, не шибко портабильно,
порой имеют место быть несоответствия.

Стандартный Юних путь - сделай пайпы перед тем, как форкнуться,
и общайся через них с дочками.
Вот тебе екзампла:

http://www.gnu.org/manual/glibc-2.2.5/html_mono/libc.html#Pipe%20to%20a%20Sub...

Сделай такую штуку в процедурине, вызови ее 3 раза, и будут тебе 3 дочки со
своими пайпами. Хошь дуплексности - протягиваешь 2 пайпа, один будет от дочки
к папе, второй - наоборот.



Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.