में आउटपुट रीडायरेक्ट करते समय फोर्क निष्पादन की समस्या के साथ समस्या मैंने टाइमआउट के साथ प्रोग्राम चलाने के लिए पर्ल में एक स्क्रिप्ट बनाई है। यदि प्रोग्राम को निष्पादित किया जा रहा है तो स्क्रिप्ट की तुलना में टाइमआउट इस कार्यक्रम को मारता है और "TIMEOUT" संदेश देता है।पर्ल
स्क्रिप्ट तब तक काफी अच्छी तरह से काम करती है जब तक कि मैंने निष्पादित प्रोग्राम के आउटपुट को रीडायरेक्ट करने का निर्णय नहीं लिया।
जब स्टडआउट और स्टडर को रीडायरेक्ट किया जा रहा है, तो स्क्रिप्ट द्वारा निष्पादित कार्यक्रम को मार नहीं दिया जा रहा है क्योंकि इसमें एक कांटा से मुझे एक पिड अलग है।
ऐसा लगता है कि पर्ल एक शेल निष्पादित करता है जो पुनर्निर्देशन के मामले में मेरे कार्यक्रम को निष्पादित करता है।
मैं आउटपुट रीडायरेक्शन करना चाहता हूं लेकिन फिर भी टाइमआउट के मामले में प्रोग्राम को मारने में सक्षम हूं।
कोई विचार है कि मैं इसे कैसे कर सकता हूं?
मेरी स्क्रिप्ट का एक सरलीकृत कोड है:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX ":sys_wait_h";
my $timeout = 5;
my $cmd = "very_long_program 1>&2 > out.txt";
my $pid = fork();
if($pid == 0)
{
exec($cmd) or print STDERR "Couldn't exec '$cmd': $!";
exit(2);
}
my $time = 0;
my $kid = waitpid($pid, WNOHANG);
while ($kid == 0)
{
sleep(1);
$time ++;
$kid = waitpid($pid, WNOHANG);
print "Waited $time sec, result $kid\n";
if ($timeout > 0 && $time > $timeout)
{
print "TIMEOUT!\n";
#Kill process
kill 9, $pid;
exit(3);
}
}
if ($kid == -1)
{
print "Process did not exist\n";
exit(4);
}
print "Process exited with return code $?\n";
exit($?);
किसी भी मदद के लिए धन्यवाद।
! चालाक, साफ और काम करता है। टी.के.एस। – Edu