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

Kirim email ke