The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
fork и как с ней бороться, !*! Skif, 21-Дек-04, 12:51  [смотреть все]
Помогите разобраться с fork, а то просветление не наступает.
Я прекрассно понимаю, что функция пораждает дочерний процесс со все теми же переменными и т.д. при чем родительский в наследство получает PID дочернего, а дочерний получает 0. В принципе это и есть те два значения, что возвращает fork.
Но вот не могу понять, как оно нормально должно работать. Пример. Мне нужно что бы отпочковался один из процессов и сделал, ну например exec и тихо умер после этого, а главный отработал до конца.
Из того, что я почерпнул из манов и  пары книжек наваял следующее:

skif@server /home/skif/PERL/#less forking.pl
#!/usr/bin/perl -w

my $pid;
my $string = "echo -n POSTFIX\n";
print "try to fork...\n";

&FORK
print "END!\n";

sub FORK {

if ($pid = fork) {
        print "Parent ID $$\n";
}

if (defined $pid) {
        print "my pid - $pid\n";
        print "bla-bla-bla-\n";
        exec "$string";
}
else {

        print "fig!\n";
}

}
exit (0);

skif@server /home/skif/PERL/#

А вот что получаю на выводе

skif@server /home/skif/PERL/#./forking.pl
try to fork...
Parent ID 60904
my pid - 0
my pid - 60905
bla-bla-bla-
bla-bla-bla-
POSTFIXPOSTFIXskif@server /home/skif/PERL/#
skif@server /home/skif/PERL/#

Как видите я получаю сначала PID родителя, потом получаю 0 - типа дочерний процесс и второй 60905 - это что опять дочерний? или родительский, тогда почему на единицу больше?
Ладно потом идем дальше.
двойной вывод bla-bla-bla- от обоих процессов, ладно, здесь еще можно смириться, но вот два вывода от функции echo мне не нужно. Мне нужно, что бы вывод был один и тихо умер после exec.

объясните как правильно его реализовать этот fork, что я делаю не правильно?
Или такой вариант, какой я желаю - нереален?




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру