The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Config;
use Test::Most (
   $Config{d_fork} ?
   (tests => 4) :
   (skip_all => "Real forks needed for test")
);
use P9Y::ProcessTable;

$SIG{CHLD} = sub { wait; };  # stop feeding the zombies

# fork a child process
if (my $child_pid = fork) {
   # parent, fork returned PID of the child process
   my $p = P9Y::ProcessTable->process($child_pid);
   
   die_on_fail;
   ok($p, 'child exists');
   ok($p->pid == $child_pid, 'pid == pid') || explain $p;
   restore_fail;
   
   lives_ok(sub { $p->kill(9) }, 'child killed') || (diag $@ and explain $p);
   sleep 2;
   $p = P9Y::ProcessTable->process($child_pid);
   ok(!$p, "child doesn't exist") || explain $p;
}
else {
   # child, fork returned 0
   # child process will be killed soon
   sleep 10;
}