… | |
… | |
368 | |
368 | |
369 | This watcher might use C<%SIG> (depending on the event loop used), |
369 | This watcher might use C<%SIG> (depending on the event loop used), |
370 | so programs overwriting those signals directly will likely not work |
370 | so programs overwriting those signals directly will likely not work |
371 | correctly. |
371 | correctly. |
372 | |
372 | |
|
|
373 | Example: exit on SIGINT |
|
|
374 | |
|
|
375 | my $w = AnyEvent->signal (signal => "INT", cb => sub { exit 1 }); |
|
|
376 | |
|
|
377 | =head3 Signal Races, Delays and Workarounds |
|
|
378 | |
373 | Also note that many event loops (e.g. Glib, Tk, Qt, IO::Async) do not |
379 | Many event loops (e.g. Glib, Tk, Qt, IO::Async) do not support attaching |
374 | support attaching callbacks to signals, which is a pity, as you cannot do |
380 | callbacks to signals in a generic way, which is a pity, as you cannot do |
375 | race-free signal handling in perl. AnyEvent will try to do it's best, but |
381 | race-free signal handling in perl. AnyEvent will try to do it's best, but |
376 | in some cases, signals will be delayed. The maximum time a signal might |
382 | in some cases, signals will be delayed. The maximum time a signal might |
377 | be delayed is specified in C<$AnyEvent::MAX_SIGNAL_LATENCY> (default: 10 |
383 | be delayed is specified in C<$AnyEvent::MAX_SIGNAL_LATENCY> (default: 10 |
378 | seconds). This variable can be changed only before the first signal |
384 | seconds). This variable can be changed only before the first signal |
379 | watcher is created, and should be left alone otherwise. Higher values |
385 | watcher is created, and should be left alone otherwise. Higher values |
380 | will cause fewer spurious wake-ups, which is better for power and CPU |
386 | will cause fewer spurious wake-ups, which is better for power and CPU |
381 | saving. All these problems can be avoided by installing the optional |
387 | saving. All these problems can be avoided by installing the optional |
382 | L<Async::Interrupt> module. |
388 | L<Async::Interrupt> module. This will not work with inherently broken |
383 | |
389 | event loops such as L<Event> or L<Event::Lib> (and not with L<POE> |
384 | Example: exit on SIGINT |
390 | currently, as POE does it's own workaround with one-second latency). With |
385 | |
391 | those, you just have to suffer the delays. |
386 | my $w = AnyEvent->signal (signal => "INT", cb => sub { exit 1 }); |
|
|
387 | |
392 | |
388 | =head2 CHILD PROCESS WATCHERS |
393 | =head2 CHILD PROCESS WATCHERS |
389 | |
394 | |
390 | You can also watch on a child process exit and catch its exit status. |
395 | You can also watch on a child process exit and catch its exit status. |
391 | |
396 | |
… | |
… | |
2270 | |
2275 | |
2271 | This slightly arcane module is used to implement fast signal handling: To |
2276 | This slightly arcane module is used to implement fast signal handling: To |
2272 | my knowledge, there is no way to do completely race-free and quick |
2277 | my knowledge, there is no way to do completely race-free and quick |
2273 | signal handling in pure perl. To ensure that signals still get |
2278 | signal handling in pure perl. To ensure that signals still get |
2274 | delivered, AnyEvent will start an interval timer to wake up perl (and |
2279 | delivered, AnyEvent will start an interval timer to wake up perl (and |
2275 | catch the signals) with soemd elay (default is 10 seconds, look for |
2280 | catch the signals) with some delay (default is 10 seconds, look for |
2276 | C<$AnyEvent::MAX_SIGNAL_LATENCY>). |
2281 | C<$AnyEvent::MAX_SIGNAL_LATENCY>). |
2277 | |
2282 | |
2278 | If this module is available, then it will be used to implement signal |
2283 | If this module is available, then it will be used to implement signal |
2279 | catching, which means that signals will not be delayed, and the event loop |
2284 | catching, which means that signals will not be delayed, and the event loop |
2280 | will not be interrupted regularly, which is more efficient (And good for |
2285 | will not be interrupted regularly, which is more efficient (And good for |
2281 | battery life on laptops). |
2286 | battery life on laptops). |
2282 | |
2287 | |
2283 | This affects not just the pure-perl event loop, but also other event loops |
2288 | This affects not just the pure-perl event loop, but also other event loops |
2284 | that have no signal handling on their own (e.g. Glib, Tk, Qt). |
2289 | that have no signal handling on their own (e.g. Glib, Tk, Qt). |
|
|
2290 | |
|
|
2291 | Some event loops (POE, Event, Event::Lib) offer signal watchers natively, |
|
|
2292 | and either employ their own workarounds (POE) or use AnyEvent's workaround |
|
|
2293 | (using C<$AnyEvent::MAX_SIGNAL_LATENCY>). Installing L<Async::Interrupt> |
|
|
2294 | does nothing for those backends. |
2285 | |
2295 | |
2286 | =item L<EV> |
2296 | =item L<EV> |
2287 | |
2297 | |
2288 | This module isn't really "optional", as it is simply one of the backend |
2298 | This module isn't really "optional", as it is simply one of the backend |
2289 | event loops that AnyEvent can use. However, it is simply the best event |
2299 | event loops that AnyEvent can use. However, it is simply the best event |