Dancer2(Perl):在后台启动外部程序

时间:2016-08-04 09:03:58

标签: javascript perl web-applications dancer

我使用Dancer2制作了一个Web应用程序。我需要在ajax请求上调用外部程序。问题是请求冻结,直到程序结束。我尝试了一些事情,比如使用&在systemcall和fork中,但它没有用。

以下是简化代码:

的Perl:

package Test::App;
use Dancer2;

our $VERSION = '0.1';

get '/' => sub {
    template 'index';
};
get '/startscript' => sub{
    my $pid = fork();
    $SIG{CHLD} = 'IGNORE';
    if($pid == 0) {
        `sleep 10`;
        exit 0;
    }
};
get '/gettest' => sub{
    return "test"
};
true;

的javascript:

$(document).ready(function() {
    jQuery.get('/startscript', getSomething);
});

function getSomething(data){
    jQuery.get('/gettest', getSomething);
    console.log(data);
}

1 个答案:

答案 0 :(得分:0)

旧问题,但是以下内容对我来说效果很好-使用&使Shell在后台运行命令。这将立即将控制权返回给路由处理程序,并且该命令在后台运行。

Perl:

post '/run-slow-script-in-background' => sub {
    my $slow_command = q{/full/path/to/slow/script --arg1 what --arg2 ever &};
    system($slow_command);
};