package Perl::AfterFork;

use 5.008;
use strict;
use warnings;

our $VERSION = '0.01';

require XSLoader;
XSLoader::load('Perl::AfterFork', $VERSION);

# Preloaded methods go here.

1;
__END__
# Below is stub documentation for your module. You'd better edit it!

=head1 NAME

Perl::AfterFork - reinitializes Perl's notion of $$ and getppid()

=head1 SYNOPSIS

  use Perl::AfterFork;
  &Perl::AfterFork::reinit_pid;
  &Perl::AfterFork::reinit_ppid;
  &Perl::AfterFork::reinit_pidstatus;
  &Perl::AfterFork::reinit;

=head1 DESCRIPTION

Using Perl's C<fork()> command or your libc's C<fork()> function or even
your operating system's C<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 C<getpid> syscall using the once fetched PID each time C<$$>
is used. Hence after a successful C<fork()> the internal PID-cache must be
invalidated. The same argument is valid for C<glibc>. It caches the
C<getpid(2)> as well.

As for C<getppid(2)>, Perl is even caching that. In my opinion Perl is
doing wrong when caching the C<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
C<waitpid> implementation.

All these cached information can be reinitialized with this module.

=over 4

=item B<reinit_pid>

reinitializes the PID-cache

=item B<reinit_ppid>

reinitializes the PPID-cache

=item B<reinit_pidstatus>

reinitializes the waitpid-cache

=item B<reinit>

reinitializes all 3 at once

=back

=head1 EXPORT

Not an Exporter.

=head1 AUTHOR

Torsten Foertsch, E<lt>torsten.foertsch@gmx.netE<gt>

=head1 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.


=cut