X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FIPC%2FOpen3.pm;h=99709ac0ca76b9ec5318c09648399b78e4b043c4;hb=227e8dd41da683de6280c9d2acd3b6b29fd52832;hp=d43f1bdb4b5cf00b641d996a5ce8581410c2aa3a;hpb=c88ded472108aed93bd950f5d5a2f4013112b680;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/IPC/Open3.pm b/lib/IPC/Open3.pm index d43f1bd..99709ac 100644 --- a/lib/IPC/Open3.pm +++ b/lib/IPC/Open3.pm @@ -49,6 +49,13 @@ failure: it just raises an exception matching C. However, C failures in the child are not detected. You'll have to trap SIGPIPE yourself. +open2() does not wait for and reap the child process after it exits. +Except for short programs where it's acceptable to let the operating system +take care of this, you need to do this yourself. This is normally as +simple as calling C when you're done with the process. +Failing to do this can result in an accumulation of defunct or "zombie" +processes. See L for more information. + If you try to read from the child's stdout writer and their stderr writer, you'll have problems with blocking, which means you'll want to use select() or the IO::Select, which means you'd best use