/usr/share/perl5/File/Pid.pm is in libfile-pid-perl 1.01-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | package File::Pid;
# $Id: Pid.pm,v 1.1 2005/01/11 13:09:54 cwest Exp $
use strict;
=head1 NAME
File::Pid - Pid File Manipulation
=head1 SYNOPSIS
use File::Pid;
my $pidfile = File::Pid->new({
file => '/some/file.pid',
});
$pidfile->write;
if ( my $num = $pidfile->running ) {
die "Already running: $num\n";
}
$pidfile->remove;
=cut
use vars qw[$VERSION];
$VERSION = sprintf "%d.%02d", split m/\./, (qw$Revision: 1.1 $)[1];
use File::Spec::Functions qw[tmpdir catfile];
use File::Basename qw[basename];
use base qw[Class::Accessor::Fast];
=head1 DESCRIPTION
This software manages a pid file for you. It will create a pid file,
query the process within to discover if it's still running, and remove
the pid file.
=head2 new
my $pidfile = File::Pid->new;
my $thisfile = File::Pid->new({
file => '/var/run/daemon.pid',
});
my $thisfileandpid = File::Pid->new({
file => '/var/run/daemon.pid',
pid => '145',
});
This constructor takes two optional parameters.
C<file> - The name of the pid file to work on. If not specified, a pid
file located in C<< File::Spec->tmpdir() >> will be created that matches
C<< (File::Basename::basename($0))[0] . '.pid' >>. So, for example, if
C<$0> is F<~/bin/sig.pl>, the pid file will be F</tmp/sig.pl.pid>.
C<pid> - The pid to write to a new pidfile. If not specified, C<$$> is
used when the pid file doesn't exist. When the pid file does exist, the
pid inside it is used.
=head2 file
my $pidfile = $pidfile->file;
Accessor/mutator for the filename used as the pid file.
=head2 pid
my $pid = $pidfile->pid;
Accessor/mutator for the pid being saved to the pid file.
=cut
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
$self->_get_pidfile;
$self->_get_pid;
return $self;
}
__PACKAGE__->mk_accessors(qw[file pid]);
=head2 write
my $pid = $pidfile->write;
Writes the pid file to disk, inserting the pid inside the file.
On success, the pid written is returned. On failure, C<undef> is
returned.
=cut
sub write {
my $self = shift;
my $file = $self->_get_pidfile;
my $pid = $self->_get_pid;
local *WRITEPID;
open WRITEPID, "> $file" or return;
print WRITEPID "$pid\n";
close WRITEPID;
return $pid;
}
=head2 running
my $pid = $pidfile->running;
die "Service already running: $pid\n" if $pid;
Checks to see if the pricess identified in the pid file is still
running. If the process is still running, the pid is returned. Otherwise
C<undef> is returned.
=cut
sub running {
my $self = shift;
my $pid = $self->_get_pid_from_file or return undef;
return kill(0, $pid)
? $pid
: undef;
}
=head2 remove
$pidfile->remove or warn "Couldn't unlink pid file\n";
Removes the pid file from disk. Returns true on success, false on
failure.
=cut
sub remove { unlink shift->_get_pidfile }
=head2 program_name
This is a utility method that allows you to determine what
C<File::Pid> thinks the program name is. Internally this is used
when no pid file is specified.
=cut
sub program_name {
my $self = shift;
my ($name) = basename($0);
return $name;
}
sub _get_pidfile {
my $self = shift;
return $self->file if $self->file;
my $file = catfile tmpdir, $self->program_name . '.pid';
$self->file($file);
return $self->file;
}
sub _get_pid {
my $self = shift;
return $self->pid if $self->pid;
$self->pid($self->_get_pid_from_file || $$);
return $self->pid;
}
sub _get_pid_from_file {
my $self = shift;
my $file = $self->_get_pidfile;
local *READPID;
open READPID, "< $file" or return;
chomp(my $pid = <READPID>);
close READPID;
return $pid;
}
1;
__END__
=head1 SEE ALSO
L<perl>.
=head1 AUTHOR
Casey West, <F<casey@geeknest.com>>.
=head1 COPYRIGHT
Copyright (c) 2005 Casey West. All rights reserved.
This module is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
|