2012-04-02 2 views
0

대화식 명령 줄 도구를 웹 응용 프로그램으로 변환하고 도구를 백엔드로 사용하고 있습니다. 나는 (AJAX를 사용하여) 사용자 명령을 받아서 명령을 추출하는 펄 CGI 스크립트를 호출한다. 그런 다음 프로세스에 명령을 보내고 결과를 수집하여 결과 HTML 페이지에 전달할 것을 기대합니다.Perl FreezeThaw로 기대하십시오.

사용자가 입력 한 첫 번째 명령은 정상적으로 실행됩니다. 다음 명령이 실행되지 않습니다.

FreezeThaw를 사용하여 첫 번째 요청 후에 expect 개체를 고정하고 다음 요청에 대해 해동하려고합니다. 그것은 동결하지만, 해동하지는 않습니다.

여기 내 코드입니다 :

use strict; 
use warnings; 
use CGI; 
use Expect; 
use FreezeThaw qw(freeze thaw); 

if (-e "logFile") { 
    ##Log file exists, just run the command after retrieving the object 
    ##Retrieve object here 
    my ($expectObject) = thaw($params{'object'}); 

    if ($command eq 'exit') { 

     #exit 
    } 
} 
else { 
    print "log NOT exists!!"; 
    ##Log file doesn't exist, spawn a new process and loop 
    my $expectObject = Expect->spawn("command") || die "\nCannot spawn: $!\n"; 
    $expectObject->expect(15, "prompt>"); 
    $expectObject->send("$command\r"); 
    $expectObject->expect(15, "stile>"); 
    $output = $expectObject->before(); 
    print "<br>$output<br>"; 

    ##Persist object here in file 
    my $serialized = freeze($expectObject); 
    ##Write serialized object to file 
    die "Serialization Error (write):\n$!" if (!addParameter("$workingDir/$folderName", "object", $serialized)); 
} 

어떤 아이디어 왜 실패 ..?

+0

그리고 누구든지 내 CGI 스크립트가 끝나면 말해도된다. 또한 스폰 된 프로 세스를 죽일 수 있습니까? 그렇다면 생성 된 프로세스를 여러 요청간에 지속시킬 수있는 방법은 무엇입니까? – krish7919

답변

1

Perl CGI 프로그램이 끝나면 생성 된 모든 프로세스가 대몬 비몬싱을하지 않으면 파기됩니다.

mod_perl 또는 다른 영구 메커니즘을 사용하여 '셸/명령'을 열거 나 모든 명령을 하나씩 실행하십시오.

+0

글쎄, 최소한 당신은 모든 스폰 된 프로세스를 깨끗이하기를 바란다. –

+0

나는 mod_perl에 대해 조금 읽었다. 당신은 나에게 모범을 보이거나 훌륭한 튜토리얼 사이트로 안내 할 수 있습니까? 아파치 사이트에는 많은 기능이 언급되어 있지만 예제를 찾을 수 없습니다. 감사! 그리고 @ user1126070, 제발 다른 영구 메커니즘에 대한 아이디어를 제발 줄래? – krish7919

+0

왜 당신은 왜 내구성이 필요합니까? – user1126070