Hi.
Saya mengalami masalah dengan fork dan $SIG{CHLD} di perl. Misalnya kode
di bawah:
===
#!/usr/bin/perl -w
$SIG{CHLD} = sub { print "$$: ", wait, " is dead.\n" };
for (;;)
{ my $pid;
if (defined ($pid=fork))
{ if ($pid) # parent
{ print "$$: Forked a child (pid=$pid).\n";
sleep 2;
}
else # child
{ print "$$: Hi, I'm a child & I'll die soon.\n";
sleep 1+int(4*rand);
exit;
}
}
}
===
Meskipun saya melakukan wait() di handler yang dipasang di $SIG{CHLD}, tetap
saja terbentuk zombie (lihat `ps ax`) yang, setelah terakumulasi cukup
banyak, mengakibatkan proses induk tidak bisa fork lagi. Bila dilihat,
ternyata tidak setiap proses anak menghasilkan signal SIGCHLD yang berhasil
di-trap oleh handler. Zombie tidak terbentuk jika $SIG{CHLD} saya assign
'IGNORE'.
Ada yang pernah mengalaminya? Emang ini gara2 signal di Perl yang ngga
reliable itu ya?
RH6.0/Linux 2.2.5/glibc 2.1.1
--sh
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]
Hosted by http://www.Indoglobal.com