대화식 명령 줄 도구를 웹 응용 프로그램으로 변환하고 도구를 백엔드로 사용하고 있습니다. 나는 (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));
}
어떤 아이디어 왜 실패 ..?
그리고 누구든지 내 CGI 스크립트가 끝나면 말해도된다. 또한 스폰 된 프로 세스를 죽일 수 있습니까? 그렇다면 생성 된 프로세스를 여러 요청간에 지속시킬 수있는 방법은 무엇입니까? – krish7919