web-dev-qa-db-ja.com

Linux上のPerlで一定時間待機する方法

Perlスクリプトで数分ごとに特定のPIDをチェックしてから、プロセスを強制終了するようにします。数分待つにはどうすればいいですか?ありがとう。

26
Chaggster

sleep (n); ここで、nはスリープする秒数です。

31
MJB

クロンタブ


Perlプログラムを設定された時間または時間間隔で実行する場合は、crontabまたは別のスケジューラーを検討する必要があります。

Perl


Perlスクリプト内から待機を実行する場合、簡単にデプロイできるオプションがいくつかあります。

システムコール

  1. sleep($n)システムコール($ nは秒の数値)
  2. usleep($n)システムコール($ nはマイクロ秒の数値)

Perlモジュール

Time :: HiRes は多くの機能を提供し、その一部はシステムコールをオーバーライドします。一部の関数には、sleep()usleep()nanosleep()alarm()ualarm()が含まれます

usleep()へのシステムコールとは異なり、 Time :: HiRes でパッケージ化されたものでは、1秒以上スリープできます。

use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
                    clock_gettime clock_getres clock_nanosleep clock
                    stat );

提案

ほとんどの場合、1つのプロセスがバックグラウンドでスリープしている間にメインプログラムが動作し続けることができるように、プロセスを分岐する必要があります。

11
vol7ron

sleep() を使用します。

_sleep(120);  # sleep for 120 seconds 
_

1秒よりも細かい粒度の遅延の場合、 _Time::HiRes_からのusleepを使用できます モジュール。 Perlの select() の4引数バージョンを使用することもできます。最初の3つの引数は未定義のままです。

_select(undef, undef, undef, 0.25);  # sleep for 250 milliseconds
_
9
Eugene Yarmash

sleep($numSeconds);を探しています

したがって、2分間待つには、sleep(120);を実行します

perldoc -f sleep

4
RC.

または、1秒が長すぎる場合はusleep(microseconds)を試すことができます。 sleep(0)は単にOSに譲ります(プロセスがスケジューラに残っている時間を破棄します)。これらの関数はすべて、最小スリープ時間を要求します。負荷の高いシステムでは、時間が多少長くなる場合があります。

sleepとusleepはC関数ですが、Perl、pythonなどには、下層のCのものを呼び出す関数があります。 usleep manページ、BSDバージョン、 Googleをお試しください)

1