Jeśli powiem Perl jawnie ignorować sygnał SIGINT nie ma wpływu:Jaka jest różnica między ignorowaniem sygnału i mówieniem mu, aby nie robił nic w Perlu?
$SIG{INT} = 'IGNORE';
my $count = 0;
say $count++ and sleep 1 while 1;
następnie naciskając klawisz Control-C, a oczywiście, nie ma wpływu. Jeśli, z drugiej strony, mówię, żeby nic nie robił:
$SIG{INT} = sub { };
my $count = 0;
say $count++ and sleep 1 while 1;
Następnie naciśnięcie Control-C daje efekt! Budzi program z wywołania sleep() i natychmiast zwiększa liczbę. Jaka jest różnica między ignorowaniem sygnału i mówieniem mu, by nic nie robił?
W moim programie chciałbym mieć kod uruchamiany na SIGINT, bez powodujący zakłócenie czegokolwiek. Chcę coś takiego:
$SIG{INT} = sub { say "Caught SIGINT!"; return IGNORED; }; # runs without disrupting sleep
W jaki sposób Twój program obsługi sygnału może działać bez zakłócania działania aktualnie uruchomionego? Logika obsługi sygnału będzie musiała wiedzieć, co ma się stać PRZED nadejściem sygnału. – innaM