1 |
dpavlin |
127 |
package Sack::Pid; |
2 |
|
|
|
3 |
|
|
use warnings; |
4 |
|
|
use strict; |
5 |
|
|
|
6 |
|
|
use File::Slurp; |
7 |
|
|
|
8 |
|
|
sub port_pid { |
9 |
|
|
my ( $self, $port, $pid ) = @_; |
10 |
|
|
|
11 |
|
|
$pid ||= $$; |
12 |
|
|
|
13 |
|
|
my $pid_path = "/tmp/sack.$port.pid"; |
14 |
|
|
if ( -e $pid_path ) { |
15 |
|
|
my $old_pid = read_file $pid_path; |
16 |
dpavlin |
133 |
if ( $old_pid == $pid ) { |
17 |
|
|
warn "[$port] pid $pid\n"; |
18 |
|
|
} else { |
19 |
|
|
warn "[$port] kill old $old_pid from $pid\n"; |
20 |
|
|
kill 9, $old_pid; |
21 |
|
|
} |
22 |
dpavlin |
127 |
} |
23 |
|
|
write_file $pid_path, $pid; |
24 |
|
|
warn "[$port] pid $pid\n"; |
25 |
|
|
|
26 |
|
|
} |
27 |
|
|
|
28 |
|
|
1; |