Commit | Line | Data |
2e9609df |
1 | package Catalyst::Restarter::Forking; |
2 | |
3 | use Moose; |
4 | |
5 | use threads; |
6 | use Thread::Cancel; |
7 | |
8 | extends 'Catalyst::Restarter'; |
9 | |
10 | has _child => ( |
11 | is => 'rw', |
12 | isa => 'Int', |
13 | ); |
14 | |
15 | |
16 | sub _fork_and_start { |
17 | my $self = shift; |
18 | |
19 | if ( my $pid = fork ) { |
20 | $self->_child($pid); |
21 | } |
22 | else { |
23 | $self->start_sub->(); |
24 | } |
25 | } |
26 | |
27 | sub _kill_child { |
28 | my $self = shift; |
29 | |
30 | return unless $self->_child; |
31 | |
32 | return unless kill 0, $self->_child; |
33 | |
34 | local $SIG{CHLD} = 'IGNORE'; |
35 | die "Cannot send INT signal to ", $self->_child, ": $!" |
36 | unless kill 'INT', $self->_child; |
37 | } |
38 | |
39 | 1; |