我在perl中使用SYSTEM命令来启动Linux系统命令,我遇到了一个问题。从描述SYSTEM命令的perldocs看来,SYSTEM在系统命令调用周围执行了Fork-Wait。不幸的是,如果系统命令挂起,Perl程序也会这样做。以下是系统命令的示例:
system("bjobs -w -r |grep -v GLS | grep -v JOBID > $bjoblistfile");
但是,每隔一段时间“bjobs”命令就会挂起,因此系统命令不会返回。
有没有办法使用SYSTEM命令“fork-wait”使用超时选项?
提前致谢!
标记
答案 0 :(得分:0)
使用闹钟()。这是一个粗略的轮廓:
adapter.notifyDataSetChanged();
recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.smoothScrollToPosition(0);
}
});
如果你真的想使用grep命令(而不是perl的内置grep()),请考虑只使用一个命令:
my $alarm_msg = "ALARM\n";
my $status;
eval {
local $SIG{ALRM} = sub { die($alarm_msg) };
alarm(300); # set alarm for 5 minutes
$status = system("shell injection safe command");
alarm(0); # turn off alarm
};
if ($@ eq $alarm_msg) {
# the alarm went off
} elsif ($@) {
# there's a bug in my code above causing eval to fail
}
# perhaps do something with exist status, $status