while (1) { $SIG{CHLD} = 'IGNORE'; unless ($apid){ die "MANAGER: Fork failed: $!" unless defined($astman_pid = fork()); $apid = $$; } if ($astman_pid) { &ASTMAN(); } unless ($xpid) { die "MANAGER: Fork failed: $!" unless defined($xmpp_pid = fork()); $xpid = $$; } if ($xmpp_pid) { &XMPPMAN(); } my $xq =`ps -p \"$apid\" | wc -l`; chomp($xq); if ($xq != 2) { $apid=$xpid; $xpid =""; # the wierd part it works, but why is apid taking xpid's PID?? my $dnow = localtime time; `/bin/echo \"$dnow ===> XMPP death: \" >> /var/log/astrp_xmpp 2>&1`; print "reload\n"; } sleep(3); }