【发布时间】:2011-03-12 07:37:05
【问题描述】:
我想要一个 Perl 脚本每隔几分钟检查一次特定的 PID,然后终止该进程。我怎么等这几分钟? 谢谢。
【问题讨论】:
我想要一个 Perl 脚本每隔几分钟检查一次特定的 PID,然后终止该进程。我怎么等这几分钟? 谢谢。
【问题讨论】:
sleep (n); 其中 n 是您想要休眠的秒数。
【讨论】:
如果您希望 Perl 程序在设定的时间或时间间隔内执行,那么您可能需要考虑 crontab 或其他调度程序。
如果您想在 Perl 脚本中执行等待,您有一些易于部署的选项。
sleep($n) 系统调用,其中 $n 是秒的数值usleep($n) 系统调用,其中 $n 是一个以微秒为单位的数值Time::HiRes 提供了许多函数,其中一些函数会覆盖系统调用。部分功能包括:sleep()、usleep()、nanosleep()、alarm()、ualarm()
与usleep() 的系统调用不同,与Time::HiRes 打包的系统调用允许休眠一秒钟以上。
use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
clock_gettime clock_getres clock_nanosleep clock
stat );
您很可能希望分叉您的进程,以便您的主程序可以在该进程在后台休眠时继续工作。
【讨论】:
使用sleep():
sleep(120); # sleep for 120 seconds
对于比一秒更精细的延迟,您可以使用Time::HiRes 模块中的usleep。您也可以使用 Perl 的四参数版本的 select(),不定义前三个参数:
select(undef, undef, undef, 0.25); # sleep for 250 milliseconds
【讨论】:
sleep 重新定义为接受小数秒的一个。
select 的行来自 Perl 文档 (perldoc -f select)。这是官方 Perl 的睡眠时间少于一秒钟的方式。其他花里胡哨的功能在可选的Time::HiRes 模块中实现。
【讨论】:
如果一秒钟太长,你可以试试usleep(microseconds)。
sleep(0) 只是让步给操作系统,(丢弃您的进程在调度程序上剩余的时间)。请注意,您要求的所有这些功能都是最少您想要睡眠的时间。在负载较重的系统上,时间可能会稍长一些。
sleep 和 usleep 是 C 函数,尽管 Perl、python 等具有调用底层 C 函数的函数。 usleep man page, BSD version, (others are available, try Google)
【讨论】:
usleep 不是我的首选方法,但它确实有效。
usleep 在 vanilla Perl 中不可用。并且没有提到 Time::HiRes 这是事实上的标准模块。这就是响应被否决的原因。