Помогите разобраться с fork, а то просветление не наступает.
Я прекрассно понимаю, что функция пораждает дочерний процесс со все теми же переменными и т.д. при чем родительский в наследство получает PID дочернего, а дочерний получает 0. В принципе это и есть те два значения, что возвращает fork.
Но вот не могу понять, как оно нормально должно работать. Пример. Мне нужно что бы отпочковался один из процессов и сделал, ну например exec и тихо умер после этого, а главный отработал до конца.
Из того, что я почерпнул из манов и пары книжек наваял следующее:skif@server /home/skif/PERL/#less forking.pl
#!/usr/bin/perl -wmy $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, что я делаю не правильно?
Или такой вариант, какой я желаю - нереален?
Все, вопрос снимается. разобрался.