>Установить обработчик прерывания ДО форка..
>Тогда его получат все потомки :) Разобрался. Не важно где стоит обработчик, до или после форка. Сигнал нужно было посылать группе процессов, и включить эти процессы в группу. Вот так работают сигналы:
#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use strict;
$|=1;
print "Content-type: text/html\n\n";
$SIG{USR1} = sub { print "$$: Сигнал получен
";};
setpgrp;
my $pppp=$$;
defined (my $pid = fork()) or die "$$: Кончились форки. $!
";
if ($pid == 0) {
#Дочь
print "$$ New, СИГНАЛ ! ! ! !
";
kill -30, $pppp;
sleep 2;
print "$$ exit
";
exit;
}
#Мать
sleep 3;
print "$$ exit
";
exit;
В результате программа печатает такое:
99829 New, СИГНАЛ ! ! ! !
99829: Сигнал получен
99827: Сигнал получен
99827 exit
99829 exit