如何在perl中绕过SYSTEM(fork-wait)?

时间:2018-03-12 15:46:09

标签: perl

我在perl中使用SYSTEM命令来启动Linux系统命令,我遇到了一个问题。从描述SYSTEM命令的perldocs看来,SYSTEM在系统命令调用周围执行了Fork-Wait。不幸的是,如果系统命令挂起,Perl程序也会这样做。以下是系统命令的示例:

system("bjobs -w -r |grep -v GLS | grep -v JOBID   > $bjoblistfile");

但是,每隔一段时间“bjobs”命令就会挂起,因此系统命令不会返回。

有没有办法使用SYSTEM命令“fork-wait”使用超时选项?

提前致谢!

标记

1 个答案:

答案 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