File Events

FileWatching.poll_fdFunction
poll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)

ファイルディスクリプタ fd の読み取りまたは書き込みの可用性の変化を監視し、timeout_s 秒で指定されたタイムアウトを設定します。

キーワード引数は、どの読み取りおよび/または書き込みの状態を監視するかを決定します。少なくとも1つは true に設定する必要があります。

返される値は、ポーリングの結果を示すブール型フィールド readablewritable、および timedout を持つオブジェクトです。

source
FileWatching.poll_fileFunction
poll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -> (previous::StatStruct, current)

ファイルの変更を監視するために、interval_s 秒ごとにポーリングを行い、変更が発生するか timeout_s 秒が経過するまで待機します。interval_s は長い期間であるべきで、デフォルトは 5.007 秒です。

変更が検出されると、ステータスオブジェクトのペア (previous, current) を返します。previous ステータスは常に StatStruct ですが、すべてのフィールドがゼロに設定されている場合があります(これは、ファイルが以前は存在しなかったか、以前はアクセスできなかったことを示します)。

current ステータスオブジェクトは StatStructEOFError(タイムアウトが経過したことを示す)、または他の Exception サブタイプ(stat 操作が失敗した場合、例えば、パスが存在しない場合)である可能性があります。

ファイルがいつ変更されたかを判断するには、current isa StatStruct && mtime(prev) != mtime(current) を比較して変更の通知を検出します。ただし、この操作には watch_file を使用することが推奨されます。なぜなら、より信頼性が高く効率的だからです。ただし、状況によっては利用できない場合があります。

source
FileWatching.watch_fileFunction
watch_file(path::AbstractString, timeout_s::Real=-1)

ファイルまたはディレクトリ path の変更を監視し、変更が発生するか timeout_s 秒が経過するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。

返される値は、ファイルの監視結果を示すブール型フィールド renamedchanged、および timedout を持つオブジェクトです。

この関数の動作はプラットフォームによってわずかに異なります。詳細な情報については https://nodejs.org/api/fs.html#fs_caveats を参照してください。

source
FileWatching.watch_folderFunction
watch_folder(path::AbstractString, timeout_s::Real=-1)

pathのファイルまたはディレクトリの変更を監視し、変更が発生するかtimeout_s秒が経過するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。

この関数は、unwatch_folderが同じpathに対して呼び出されるまで、バックグラウンドでpathの変更を追跡し続けます。

返される値は、最初のフィールドが変更されたファイルの名前(利用可能な場合)で、2番目のフィールドがイベントを示すブールフィールドrenamedchanged、およびtimedoutを持つオブジェクトのペアです。

この関数の動作はプラットフォームによってわずかに異なります。詳細な情報についてはhttps://nodejs.org/api/fs.html#fs_caveatsを参照してください。

source
FileWatching.unwatch_folderFunction
unwatch_folder(path::AbstractString)

pathの変更に対するバックグラウンドトラッキングを停止します。同じパスでwatch_folderが戻るのを待っている別のタスクがある間にこれを行うことは推奨されません。結果が予測不可能になる可能性があります。

source

Pidfile

アドバイザリーpidファイル(ロックファイル)を作成するためのシンプルなユーティリティツールです。

Primary Functions

FileWatching.Pidfile.mkpidlockFunction
mkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)

現在のプロセスまたはpidまたはprocで識別されるプロセスのために、パス「at」のためのpidファイルロックを作成します。ロックされた後に実行する関数を受け取ることができ、doブロックで使用され、その後ロックは自動的に閉じられます。ロックに失敗し、waitがfalseの場合、エラーがスローされます。

ロックは、closefinalizer、またはprocが終了した後すぐに解放されます。戻り値がプログラムのクリティカルセクションの終わりまで生きていることを確認してください。そうしないと、finalizerが早く回収してしまいます。

オプションのキーワード引数:

  • mode: ファイルアクセスモード(プロセスのumaskによって修正されます)。デフォルトは世界読み取り可能です。
  • poll_interval: 試行の間の最大時間を指定します(watch_fileが機能しない場合)。
  • stale_age: 既存のpidファイルを削除します(ロックを無視して)、そのmtimeに基づいてこの秒数より古い場合。ファイルは、ファイル内のpidが有効である可能性がある場合、これより5倍長くなるまで削除されません。また、refreshが0にオーバーライドされてロックの更新が無効にされている場合は、25倍長くなります。デフォルトではこれは無効になっています(stale_age = 0)、しかし、典型的に推奨される値は、推定される通常の完了時間の約3-5倍です。
  • refresh: 経過した時間の間隔ごとにmtimeを更新することによって、ロックが古くなるのを防ぎます。デフォルトでは、これはstale_age/2に設定されており、推奨される値です。
  • wait: trueの場合、ロックを取得するまでブロックし、falseの場合、ロックが失敗した場合にエラーを発生させます。
source
FileWatching.Pidfile.trymkpidlockFunction
trymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)

mkpidlockと同様ですが、ファイルがすでにロックされている場合は待機するのではなくfalseを返します。

Julia 1.10

この関数は少なくともJulia 1.10が必要です。

source
Base.closeMethod
close(lock::LockMonitor)

pidfileロックを解除します。

source

Helper Functions

FileWatching.Pidfile.open_exclusiveFunction
open_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File

読み書きのアドバイザリー排他アクセスのために新しいファイルを作成します。waitfalseの場合、ロックファイルが存在する場合はエラーを出力し、そうでない場合はロックを取得するまでブロックします。

キーワード引数の説明については、mkpidlockを参照してください。

source
FileWatching.Pidfile.tryopen_exclusiveFunction
tryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}

新しいファイルを読み書きのアドバイザリー排他アクセス用に作成しようとし、既に存在する場合は何も返さない。

source
FileWatching.Pidfile.parse_pidfileFunction
parse_pidfile(file::Union{IO, String}) => (pid, hostname, age)

私たちのpidfileフォーマットを解析しようとします。失敗した読み取りについては、それぞれ(0, "", 0.0)に置き換えられた要素があります。

source
FileWatching.Pidfile.stale_pidfileFunction
stale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool

open_exclusive のためのヘルパー関数で、pidfile が古いかどうかを判断します。

source
FileWatching.Pidfile.isvalidpidFunction
isvalidpid(hostname::String, pid::Cuint) :: Bool

pidが有効なプロセスIDであるかどうかを保守的に推定しようとします。

source
Base.Filesystem.touchMethod
Base.touch(::Pidfile.LockMonitor)

ロックの mtime を更新して、まだ新鮮であることを示します。

mkpidlock コンストラクタの refresh キーワードも参照してください。

source