use POSIX;
... code here ...
$child_pid = waitpid(-1, WNOHANG);
####
use POSIX;
if ($pid = fork)
{
# parent
do
{
local $| = 1;
print "\b-"; sleep 1;
print "\b\\"; sleep 1;
print "\b|"; sleep 1;
print "\b/"; sleep 1;
$child_pid = waitpid(-1,WNOHANG);
} until $child_pid == -1;
}
else
{
# child
#exec("cmd");
sleep 15;
exit(0);
}
####
use POSIX;
$keep_going = 1;
#set the SIGCHLD signal handler
$SIG{CHLD} = \&REAPER;
if ($pid = fork)
{
# parent
while($keep_going)
{
local $| = 1;
print "\b-"; sleep 1;
print "\b\\"; sleep 1;
print "\b|"; sleep 1;
print "\b/"; sleep 1;
}
}
else
{
# child
sleep 15;
exit(0);
}
#SIGCHLD signal handler
sub REAPER
{
#test if all childred are dead
unless(waitpid(-1, WNOHANG) == -1 )
{
$keep_going = 0;
}
#reset the signal handler for more than
#one child death.
$SIG{CHLD} = \&REAPER
}