Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在后台或单独进程中运行perl函数_Perl_Apache_Process_Background Process - Fatal编程技术网

在后台或单独进程中运行perl函数

在后台或单独进程中运行perl函数,perl,apache,process,background-process,Perl,Apache,Process,Background Process,我在兜圈子。我有一个网页,创建了一个巨大的文件。创建此文件需要很长时间,并且位于子例程中 我的页面运行此子例程而不等待创建/处理它的最佳方式是什么?由于我是从网页上进行此操作,apache进程是否存在任何问题 执行此任务的最简单方法是简单地使用fork(),并在子进程中运行长时间运行的子例程。同时,让家长返回Apache。您指出您已经尝试过这一点,但缺少关于代码外观和失败原因的详细信息,因此很难帮助您沿着这条道路前进 另一种选择是运行一个单独的进程,负责管理长期运行的任务。让网页使用本地套接字(

我在兜圈子。我有一个网页,创建了一个巨大的文件。创建此文件需要很长时间,并且位于子例程中


我的页面运行此子例程而不等待创建/处理它的最佳方式是什么?由于我是从网页上进行此操作,apache进程是否存在任何问题

执行此任务的最简单方法是简单地使用
fork()
,并在子进程中运行长时间运行的子例程。同时,让家长返回Apache。您指出您已经尝试过这一点,但缺少关于代码外观和失败原因的详细信息,因此很难帮助您沿着这条道路前进

另一种选择是运行一个单独的进程,负责管理长期运行的任务。让网页使用本地套接字(或通过创建包含必要输入数据的文件)向长时间运行的流程发送工作单元,然后您的web脚本可以立即返回,而单独的流程负责完成长时间运行的任务


这种解耦执行的方法相当常见,通常称为“任务队列”(如果有某种机制在请求进入时对其进行排队)。有许多工具可以帮助您设计此类解决方案(但对于基于文件系统的通信的简单情况,没有它们您可能会很好)。

执行此任务的最简单方法是简单地使用
fork()
并在子进程中运行长时间运行的子例程。同时,让家长返回Apache。您指出您已经尝试过这一点,但缺少关于代码外观和失败原因的详细信息,因此很难帮助您沿着这条道路前进

另一种选择是运行一个单独的进程,负责管理长期运行的任务。让网页使用本地套接字(或通过创建包含必要输入数据的文件)向长时间运行的流程发送工作单元,然后您的web脚本可以立即返回,而单独的流程负责完成长时间运行的任务


这种解耦执行的方法相当常见,通常称为“任务队列”(如果有某种机制在请求进入时对其进行排队)。有许多工具可以帮助您设计此类解决方案(但对于基于文件系统的通信的简单情况,没有它们您可能会很好)。

我认为您希望创建Apache的工作孙辈,即:

Apache -> child -> grandchild

孩子在叉了孙子后就死了,孙子关上了STDIN、STDOUT和STDERR。(然后孙辈创建文件。)以下是创建僵尸守护程序(一个与Web服务器没有连接的无父级工作进程)的基本步骤。

我认为您需要创建Apache的工作孙辈,即:

Apache -> child -> grandchild

孩子在叉了孙子后就死了,孙子关上了STDIN、STDOUT和STDERR。(孙辈然后创建文件。)以下是创建僵尸守护进程(一个与Web服务器没有连接的无父工作进程)的基本步骤。

您能在子例程中派生一个子进程来创建文件吗?我已经尝试过了,它在50%的时间内都能正常工作。不知道为什么会失败,也不知道是否有更好的解决方案。你能在子例程中分叉一个子进程来创建文件吗?我已经尝试过了,它有50%的时间可以工作。不确定它失败的原因以及是否有更好的解决方案。在分叉时,确保子进程关闭STDIN、STDOUT和STDERR。否则,它们仍将连接到Web服务器,而Web服务器不会实现关闭连接。当您分叉时,请确保子进程关闭STDIN、STDOUT和STDERR。否则,它们仍将连接到Web服务器,并且它不会实现关闭连接。