【发布时间】:2011-08-31 19:06:09
【问题描述】:
perl 文档中有很多地方警告不要将睡眠与警报结合使用,因为睡眠可以通过警报实现。但是,如果您的系统出现这种情况,文档并没有说明会出现什么症状。
我可以使用这个 shell 管道检测到这一点(来自this other question 的想法):
strace perl -e 'sleep 1' 2>&1 | grep 'sleep\|alarm'
如果睡眠是通过警报实现的,您将在输出中看到警报系统调用。否则,您将看到来自 Ubuntu 10.04.2 的不同睡眠系统调用,如下所示:
execve("/usr/bin/perl", ["perl", "-e", "sleep 1"], [/* 26 vars */]) = 0
nanosleep({1, 0}, 0xbfacba54) = 0
但是,我正在寻找简洁的纯 perl 代码(最好是单行代码)来检测它以及您应该期望看到的警报是否是睡眠的基础以及如果不是睡眠的预期会发生什么。
注意:
- 此问题不是在寻找如何防止闹钟中断睡眠。那是asked and answered。
- 不寻找通过警报实现睡眠时的解决方法。也许您可以在另一个问题上提出并回答。
- 这不是 perl-golfing 问题。我不是在寻找最简洁的方式。
- 我不会为任何生产代码这样做,这只是出于好奇。
【问题讨论】:
标签: perl