您正在从Perl 5.24.4查看此文档的版本。查看最新版本

做了一个叉(2)系统调用以创建在同一点运行同一程序的新进程。它将子pid返回给父进程,0子进程,或未定义如果fork不成功。文件描述符(有时还锁定这些描述符)是共享的,而其他所有内容都是复制的。在大多数支持叉(2),非常小心地使它变得非常高效(例如,在数据页面上使用copy-on-write技术),使其在过去几十年中成为多任务处理的主导范式。

Perl尝试在分叉子进程之前刷新所有为输出而打开的文件,但这在某些平台上可能不受支持(请参阅珀尔波特). 为了安全起见,您可能需要设置$|($自动润滑在里面英语)或致电自动冲洗方法IO::句柄在任何打开的句柄上,以避免重复输出。

如果你如果不照顾你的孩子,你会积累僵尸。在某些系统上,可以通过设置$SIG{CHLD}(美元)“忽略”。另请参阅珍珠岩更多分叉和收割垂死儿童的例子。

请注意,如果您的分叉子级继承了诸如STDIN和STDOUT之类的系统文件描述符,这些描述符实际上是通过管道或套接字连接的,即使您退出,远程服务器(例如,CGI脚本或从远程shell启动的后台作业)也不会认为您完成了。你应该重新打开/开发/空如果有什么问题。

在某些平台(如Windows)上叉(2)系统调用不可用,可以构建Perl来模拟在Perl解释器中。在Perl程序级别上,仿真被设计为尽可能与“Unix”兼容叉(2)然而,它有一些限制,必须在可移植的代码中加以考虑。请参见珍珠叉了解更多详细信息。

便携性问题:perlport中的“fork”.