Tôi có một tập lệnh perl chạy một loạt các tập lệnh batch để kiểm tra hồi quy. Tôi muốn thực hiện một thời gian chờ trên các kịch bản lô. Tôi hiện đang có mã sau đây.báo động perl với subprocess
my $pid = open CMD, "$cmd 2>&1 |";
eval {
# setup the alarm
local $SIG{ALRM} = sub { die "alarm\n" };
# alarm on the timeout
alarm $MAX_TIMEOUT;
log_output("setting alarm to $MAX_TIMEOUT\n");
# run our exe
while(<CMD>) {
$$out_ref .= $_;
}
$timeRemaining = alarm 0;
};
if ([email protected]) {
#catch the alarm, kill the executable
}
Vấn đề là bất kể tôi đặt thời gian chờ tối đa là gì, báo thức không bao giờ bị vấp. Tôi đã thử sử dụng Perl :: Unsafe :: Signals nhưng điều đó không giúp được gì.
Đây có phải là cách tốt nhất để thực thi các tập lệnh theo lô nếu tôi muốn có thể nắm bắt đầu ra của chúng không? Có cách nào khác sẽ làm điều tương tự mà sẽ cho phép tôi sử dụng báo động, hoặc là có một phương pháp khác ngoài báo động để thời gian chờ chương trình?
Tôi đã xây dựng một kịch bản thử nghiệm để xác nhận rằng báo thức hoạt động với phiên bản perl và cửa sổ của tôi, nhưng nó không hoạt động khi tôi chạy một lệnh như thế này.
Tôi đang chạy ứng dụng này với activeperl 5.10.1 trên windows 7 x64.