gpt4 book ai didi

perl - Perl 中的轮询机制

转载 作者:行者123 更新时间:2023-12-02 04:50:42 25 4
gpt4 key购买 nike

我编写了一个 Perl 脚本,它按照计划执行任务。有时任务运行 3 小时,有时运行 9 小时。任务完成后,任务状态变为 COMPLETE

我们有一个显示任务状态的内部 CLI 命令。我想实现一种轮询机制,脚本会定期检查任务的状态,并在状态更改为 COMPLETE 时返回 PASS

一种选择是循环运行命令并定期检查状态。我想知道是否有任何其他更好或更可靠的方法来定期检查状态。也许在这些线路上实现调度程序或其他东西。

有人有什么建议吗?

最佳答案

如果你想在 Perl 程序结束前检查它的状态,你可以使用 signals 来完成。 .请注意,以下代码非常简单,信号和 Perl 有很多需要注意的地方,尤其是旧版本的 Perl。

首先,为您要使用的信号定义一个信号处理函数。如果您正在引用可能在程序其他地方使用的任何变量,请确保这些变量在范围内。下面的示例使用 local 动态范围 $i 以便它在 USR1 信号处理程序中可用:

$SIG{USR1} = sub { print STDOUT "In USR1 signal handler.  \$i is $i\n"; };

my $j;
for (local $i = 1; $i < 1000000000; $i++) {
$j = $i*2;
}

然后,每当您想查询正在运行的进程的状态时,获取 PID 并向其发送 SIGUSR1 信号。您可以从另一个程序内部执行此操作,但以下示例显示了它是从命令行执行的:

mb:~ doug$ kill -SIGUSR1 8492

使用上面显示的信号处理程序,当程序接收到信号时,它将输出到它的 STDOUT,如下所示:

In USR1 signal handler.  $i is 162181697

在 Perl 执行信号处理程序后,它将返回到它被中断之前正在做的事情。

关于perl - Perl 中的轮询机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com