File Events
FileWatching.poll_fd
— Functionpoll_fd(fd, timeout_s::Real=-1; readable=false, writable=false)
파일 디스크립터 fd
의 읽기 또는 쓰기 가능성의 변화를 모니터링하며, timeout_s
초로 주어진 타임아웃을 설정합니다.
키워드 인자는 읽기 및/또는 쓰기 상태 중 어떤 것을 모니터링할지를 결정하며, 이 중 적어도 하나는 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
이지만, 모든 필드가 0으로 설정되어 있을 수 있습니다(파일이 이전에 존재하지 않았거나 접근할 수 없었음을 나타냄).
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
의 변경 사항을 계속 추적합니다.
반환 값은 변경된 파일의 이름(가능한 경우)과 이벤트를 제공하는 불리언 필드 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"에 대한 pidfile 잠금을 생성합니다. 잠금이 설정된 후 do
블록에서 실행할 함수를 사용할 수 있으며, 이후 잠금은 자동으로 닫힙니다. 잠금에 실패하고 wait
가 false인 경우 오류가 발생합니다.
잠금은 close
, finalizer
또는 proc
가 종료된 직후에 해제됩니다. 반환 값이 프로그램의 중요한 섹션 끝까지 살아 있도록 하여 finalizer
가 이를 조기에 회수하지 않도록 하십시오.
선택적 키워드 인수:
mode
: 파일 접근 모드(프로세스 umask에 의해 수정됨). 기본값은 모든 사용자에게 읽기 가능.poll_interval
: 시도 간 최대 시간을 지정합니다(만약watch_file
이 작동하지 않는 경우).stale_age
: 기존 pidfile을 삭제합니다(잠금을 무시하고) 이 많은 초보다 오래된 경우, 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
키워드도 참조하십시오.