スリープ状態になった perl スクリプトを手動で起動できるかどうか疑問に思っていました。基本的に、何かを実行した後、たとえば 1 時間スクリプトをスリープ状態に設定し、10 分後に再度実行したいことに気付きます。
私が実行しているプラットフォームは tcsh シェルを備えた Linux です。
繰り返しますが、助けてくれてありがとう
多くのシステムでは、 のようなシステム コール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