Se dico Perl ad ignorare in modo esplicito un segnale, SIGINT non ha alcun effetto:Qual è la differenza tra ignorare un segnale e dirgli di non fare nulla in Perl?
$SIG{INT} = 'IGNORE';
my $count = 0;
say $count++ and sleep 1 while 1;
Poi premere Control-C, invece, ovviamente, non ha alcun effetto. Se, d'altra parte, dico di non fare nulla:
$SIG{INT} = sub { };
my $count = 0;
say $count++ and sleep 1 while 1;
Quindi premere Control-C ha effetto! Riattiva il programma dalla sua chiamata Sleep() e incrementa immediatamente il conteggio. Qual è la differenza tra ignorare un segnale e dirgli di non fare nulla?
Nel mio programma, mi piacerebbe avere il codice eseguito su SIGINT, senza facendolo interrompere nulla. Voglio qualcosa di simile:
$SIG{INT} = sub { say "Caught SIGINT!"; return IGNORED; }; # runs without disrupting sleep
Come è possibile che il tuo gestore di segnale funzioni senza interrompere ciò che è attualmente in esecuzione? La logica di gestione del segnale dovrà sapere cosa dovrebbe accadere PRIMA che il segnale si verifichi. – innaM