NAME
Perl::AfterFork - reinitializes Perl's notion of $$ and getppid()
SYNOPSIS
use Perl::AfterFork;
&Perl::AfterFork::reinit_pid;
&Perl::AfterFork::reinit_ppid;
&Perl::AfterFork::reinit_pidstatus;
&Perl::AfterFork::reinit;
DESCRIPTION
Using Perl's "fork()" command or your libc's "fork()" function or even
your operating system's "fork" syscall does not do the same thing.
Since a process' PID does not change during it's life time Perl caches
the result of the "getpid" syscall using the once fetched PID each time
$$ is used. Hence after a successful "fork()" the internal PID-cache
must be invalidated. The same argument is valid for "glibc". It caches
the getpid(2) as well.
As for getppid(2), Perl is even caching that. In my opinion Perl is
doing wrong when caching the getppid(2) result at all since it can
change without further notice when the parent process dies.
Further Perl maintains an internal cache of spawned children for it's
"waitpid" implementation.
All these cached information can be reinitialized with this module.
reinit_pid
reinitializes the PID-cache
reinit_ppid
reinitializes the PPID-cache
reinit_pidstatus
reinitializes the waitpid-cache
reinit
reinitializes all 3 at once
EXPORT
Not an Exporter.
AUTHOR
Torsten Foertsch, <
[email protected]>
COPYRIGHT AND LICENSE
Copyright (C) 2005 by Torsten Foertsch
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself, either Perl version 5.8.5 or, at
your option, any later version of Perl 5 you may have available.
INSTALLATION
perl Makefile.PL
make
make test
make install
DEPENDENCIES
* "syscall( SYS_fork )" and "syscall( SYS_getpid )" are needed for
testing.
* perl 5.8.0
TESTED ON
* Linux 2.6 with glibc 2.3.3