Я хочу запустить некоторые тестовые исполняемые файлы со скриптом Perl, проанализировать их STDOUT и вернуть значение выхода в зависимости от того, что содержится в STDOUT. Я не очень знаком с Perl, так что это было немного сложно.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы мой скрипт на Perl получал все, что мог, даже если исполняемые файлы теста зависали или зависали.
В данный момент я использую будильник для тайм-аута. Если он зависнет, я хотел бы просто взять все данные, которые смогу, и продолжить анализ. К сожалению, при моем текущем методе выполнения, если он зависает, я не получаю данных, и процесс зомби живет вечно.
Моя (вероятно, наивная) версия получения результатов теста такова.
#!/usr/bin/perl
use strict;
use warnings;
my @output;
eval {
local $SIG{ALRM} = sub {die "alarm\n"};
alarm 15;
@output = `testExecutable`;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n";
print "timed out\n";
}
else {
print "didn't time out\n";
}
print @output;
По сути, мне нужно выполнить testExecutable таким образом, чтобы я мог получить доступ к любым данным, которые он выводит до срабатывания тревоги, а затем уничтожить процесс testExecutable в моем обработчике тревоги.
При необходимости я могу изменить исполняемые файлы теста. Оглядываясь вокруг, кажется, что буферизация может вызывать некоторую озабоченность.