File Events
FileWatching.poll_fd
— Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)
ファイルディスクリプタ fd
の読み取りまたは書き込みの可用性の変化を監視し、timeout_s
秒で指定されたタイムアウトを設定します。
キーワード引数は、どの読み取りおよび/または書き込みの状態を監視するかを決定します。少なくとも1つは true
に設定する必要があります。
返される値は、ポーリングの結果を示すブール型フィールド readable
、writable
、および timedout
を持つオブジェクトです。
FileWatching.poll_file
— Functionpoll_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
ステータスオブジェクトは StatStruct
、EOFError
(タイムアウトが経過したことを示す)、または他の Exception
サブタイプ(stat
操作が失敗した場合、例えば、パスが存在しない場合)である可能性があります。
ファイルがいつ変更されたかを判断するには、current isa StatStruct && mtime(prev) != mtime(current)
を比較して変更の通知を検出します。ただし、この操作には watch_file
を使用することが推奨されます。なぜなら、より信頼性が高く効率的だからです。ただし、状況によっては利用できない場合があります。
FileWatching.watch_file
— Functionwatch_file(path::AbstractString, timeout_s::Real=-1)
ファイルまたはディレクトリ path
の変更を監視し、変更が発生するか timeout_s
秒が経過するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。
返される値は、ファイルの監視結果を示すブール型フィールド renamed
、changed
、および timedout
を持つオブジェクトです。
この関数の動作はプラットフォームによってわずかに異なります。詳細な情報については https://nodejs.org/api/fs.html#fs_caveats を参照してください。
FileWatching.watch_folder
— Functionwatch_folder(path::AbstractString, timeout_s::Real=-1)
path
のファイルまたはディレクトリの変更を監視し、変更が発生するかtimeout_s
秒が経過するまで待機します。この関数はファイルシステムをポーリングせず、代わりにプラットフォーム固有の機能を使用してオペレーティングシステムからの通知を受け取ります(例:Linuxのinotifyを介して)。詳細については、以下のNodeJSドキュメントを参照してください。
この関数は、unwatch_folder
が同じpath
に対して呼び出されるまで、バックグラウンドでpath
の変更を追跡し続けます。
返される値は、最初のフィールドが変更されたファイルの名前(利用可能な場合)で、2番目のフィールドがイベントを示すブールフィールドrenamed
、changed
、およびtimedout
を持つオブジェクトのペアです。
この関数の動作はプラットフォームによってわずかに異なります。詳細な情報についてはhttps://nodejs.org/api/fs.html#fs_caveatsを参照してください。
FileWatching.unwatch_folder
— Functionunwatch_folder(path::AbstractString)
path
の変更に対するバックグラウンドトラッキングを停止します。同じパスでwatch_folder
が戻るのを待っている別のタスクがある間にこれを行うことは推奨されません。結果が予測不可能になる可能性があります。
Pidfile
アドバイザリーpidファイル(ロックファイル)を作成するためのシンプルなユーティリティツールです。
Primary Functions
FileWatching.Pidfile.mkpidlock
— Functionmkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
mkpidlock(at::String, proc::Process; kwopts...)
現在のプロセスまたはpidまたはprocで識別されるプロセスのために、パス「at」のためのpidファイルロックを作成します。ロックされた後に実行する関数を受け取ることができ、do
ブロックで使用され、その後ロックは自動的に閉じられます。ロックに失敗し、wait
がfalseの場合、エラーがスローされます。
ロックは、close
、finalizer
、または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の場合、ロックが失敗した場合にエラーを発生させます。
FileWatching.Pidfile.trymkpidlock
— Functiontrymkpidlock([f::Function], at::String, [pid::Cint]; kwopts...)
trymkpidlock(at::String, proc::Process; kwopts...)
mkpidlock
と同様ですが、ファイルがすでにロックされている場合は待機するのではなくfalse
を返します。
この関数は少なくともJulia 1.10が必要です。
Base.close
— Methodclose(lock::LockMonitor)
pidfileロックを解除します。
Helper Functions
FileWatching.Pidfile.open_exclusive
— Functionopen_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File
読み書きのアドバイザリー排他アクセスのために新しいファイルを作成します。wait
がfalse
の場合、ロックファイルが存在する場合はエラーを出力し、そうでない場合はロックを取得するまでブロックします。
キーワード引数の説明については、mkpidlock
を参照してください。
FileWatching.Pidfile.tryopen_exclusive
— Functiontryopen_exclusive(path::String, mode::Integer = 0o444) :: Union{Void, File}
新しいファイルを読み書きのアドバイザリー排他アクセス用に作成しようとし、既に存在する場合は何も返さない。
FileWatching.Pidfile.write_pidfile
— Functionwrite_pidfile(io, pid)
オープンなIOディスクリプタに私たちのpidfileフォーマットを書き込みます。
FileWatching.Pidfile.parse_pidfile
— Functionparse_pidfile(file::Union{IO, String}) => (pid, hostname, age)
私たちのpidfileフォーマットを解析しようとします。失敗した読み取りについては、それぞれ(0, "", 0.0)に置き換えられた要素があります。
FileWatching.Pidfile.stale_pidfile
— Functionstale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool
open_exclusive
のためのヘルパー関数で、pidfile が古いかどうかを判断します。
FileWatching.Pidfile.isvalidpid
— Functionisvalidpid(hostname::String, pid::Cuint) :: Bool
pidが有効なプロセスIDであるかどうかを保守的に推定しようとします。
Base.Filesystem.touch
— MethodBase.touch(::Pidfile.LockMonitor)
ロックの mtime
を更新して、まだ新鮮であることを示します。
mkpidlock
コンストラクタの refresh
キーワードも参照してください。