1

我想知道是否可以手动唤醒已经进入睡眠状态的 perl 脚本。基本上,我在执行某些操作后将脚本设置为休眠一个小时,10 分钟后我意识到我希望它再次运行。

我运行的平台是 linux,带有 tcsh shell。

再次感谢您的帮助

4

1 回答 1

5

在许多系统上,系统调用之类的sleep可能会被信号中断。在这样的中断上,sleep将返回它实际睡眠的秒数并设置$!。当然,您必须使用允许您的脚本继续执行的信号。如果您没有设置任何特定的信号处理程序,则SIGSTOP和的组合SIGCONT也可以解决问题。

例子:

$ perl -e 'print "slept for ", sleep 1000, " seconds.\n";' &
[2] 6220
$ kill -STOP 6220
$ kill -CONT 6220
slept for 8 seconds[2]+  Stopped     perl -e ...

另一个例子(琐碎的SIGUSR1处理程序):

$ perl -e '$SIG{USR1}=sub{}; print "slept for ", sleep 1000, "s.\n"' &
[1] 2419
$ kill -USR1 2419
slept for 4s
于 2012-08-11T01:33:29.093 回答