罰款這是我的計劃Perl的STDIN在後臺掛起,工作在前臺
my $input;
my $finish = 0;
my $timer = 5; # 5 seconds
eval {
while(! $finish) {
local $SIG{ALRM} = sub {
# check counter and set alarm again
if (--$timer) { alarm 1 }
# no more waiting
else { die "timeout getting the input \n" }
};
# alarm every second
alarm 1;
$input = <STDIN>;
alarm 0;
if ($input) {
chomp $input;
if($input){
print("Received input : $input");
$finish = 1;
} else {
print("Please enter valid input");
}
} else {
print("input is undefined");
last;
}
}
};
if ([email protected] || !$input) {
print("Timeout in getting input.");
return undef;
}
return $input;
STDIN正常工作前景。但運行相同的程序背景時失敗。如果用戶在5秒內沒有輸入任何輸入,則邏輯將跳出循環。但在後臺運行時,該進程應在x秒內退出,但進程卡在<STDIN>
行。
如何解決這個問題?
每個程序在後臺掛起時都會掛在STDIN上。從哪裏得到它的輸入? – yacc
用戶應該在x秒內輸入或程序應該退出while循環。由於這是在後臺,用戶輸入是不可能的,所以程序應該在x秒內退出,這不會發生。 –
我明白了。嘗試getc並設置tty選項,如下所示:https://perldoc.perl.org/functions/getc.html – yacc