gpt4 book ai didi

perl - 我可以让一个从浏览器启动的 Perl 脚本 fork 自身,而不是等待 child 结束吗?

转载 作者:行者123 更新时间:2023-12-05 01:52:05 25 4
gpt4 key购买 nike

还有 posted在 PerlMonks 上。

我的 Linux 服务器上有这个非常简单的 Perl 脚本。

我希望能够做的是从另一台机器上的浏览器调用脚本
让脚本启动一个分支
让 parent 发送一个 httpResponse(释放浏览器)
立即结束父级
让 child 做它的工作,繁重的复杂数据库工作,这可能需要一两分钟
让 child 在没有任何输出的情况下结束自己

当我从浏览器调用这个脚本时,浏览器直到 child 完成后才收到发送的响应。

是的,它在从命令行调用时有效。

我想做的事可行吗?附:我什至用 ProcSimple 尝试过,但还是挂断了电话。

#!/usr/bin/perl
local $SIG{CHLD} = "IGNORE";
use lib '/var/www/cgi-bin';
use CGI;

my $q = new CGI;

if(!defined($pid = fork())) {
die "Cannot fork a child: $!";
} elsif ($pid == 0) {
print $q->header();
print "i am the child\n";
sleep(10);
print "child is done\n";
exit;
} else {
print $q->header();
print "I am the parent\n";
print "parent is done\n";
exit 0;
}
exit 0;

最佳答案

一般来说你必须detach子进程从其父进程允许父进程干净地退出——否则父进程不能假设它不需要处理更多的输入/输出。

} elsif ($pid == 0) {
close STDIN;
close STDERR;
close STDOUT; # or redirect
do_long_running_task();
exit;

在您的示例中,子进程正在执行 print 语句,直到它退出。如果父进程已被终止并关闭其 I/O 句柄,这些打印会去哪里?

关于perl - 我可以让一个从浏览器启动的 Perl 脚本 fork 自身,而不是等待 child 结束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71774161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com