我有一个网页向cgi脚本发送请求,该脚本基本上必须tar和压缩可能超过50G的巨大目录。我在我的cgi脚本中派生了一个进程,用于执行tarling任务,同时向父母脚本中的网页发送响应消息。但是,父脚本(即使没有waitpid($ pid,0))等待焦油过程结束,然后将味精发送到网页,然后通过警告框打印。有没有一种方法可以立即发送msg,以便用户知道tarling过程已经启动,并且该进程可以在后台进行。我不想执行exec(),因为我需要在创建此tar时捕获任何错误球。如何同时运行子进程和父进程
另外,会不会有任何记忆的问题,而我试图焦油这么大的目录?
$SIG{CHLD} = 'IGNORE';
$|++;
$pid = fork();
if($pid){ sendResponse($data); exit; }
elsif($pid == 0)
{
setsid();
$gpid = fork();
if(! $gpid)
{
qx(tar up big directories over 50G...);
}
}
谢谢!所以,如果我取消缓冲文件句柄($ |),我应该能够立即发送响应。客户端和服务器之间没有数据交换,除了这个msg。为了避免在客户端打印'超时'消息,分离孩子是否明智? – Wilderness 2011-04-25 23:19:59
如果父母和孩子之间没有数据交换,也没有父母徘徊的理由,那么分离就有意义。 此外,在父母关闭时(假设孩子被分离),任何输出都应发送给客户。所以,如果解除关联孩子,你不需要缓存标准输出。 – IndyGreg 2011-04-26 00:48:59
完美!万分感谢 !将尝试一下。 – Wilderness 2011-04-26 01:41:18