在Windows上运行时,遇到了Perl CGI脚本的进程故障。 主要的问题似乎是,在Windows上运行时会模拟“fork”,而实际上并没有创build一个新的进程(只是当前的另一个线程)。 这意味着正在等待进程完成的Web服务器(如IIS)将继续等待,直到“后台”进程结束。
有没有在Windows下从CGI脚本中分离出后台进程的方法? 更好的是,我可以调用哪一个函数来实现跨平台的function?
(只是为了让生活变得更加困难,我真的很喜欢将分叉进程输出redirect到一个文件的好方法)。
如果你想以独立于平台的方式来做到这一点, Proc :: Background可能是最好的方法。
使用Win32 :: Process->使用DETACHED_PROCESS参数创建
perlfork :
Perl提供了一个fork()关键字,它对应于同名的Unix系统调用。 在fork()系统调用可用的大多数类Unix平台上,Perl的fork()只是简单地调用它。
在fork()系统调用不可用的某些平台上,可以构建Perl以在解释器级别模拟fork()。 尽管仿真的设计与Perl程序层面的真实fork()尽可能兼容,但是由于所有伪子进程都是以这种方式创建的就操作系统而言,在相同的实际过程中。
我在Windows上发现了fork()的真正问题,特别是在处理Perl中的Win32对象时。 因此,如果这将是Windows特定的,我真的建议你看一下Perl中的线程库。
我使用这个效果很好,在使用IIS的网站上同时接受多个连接,然后使用更多的线程同时执行不同的脚本。