파일이 열려 있거나 사용 중인지 알려주는 명령 줄 함수 또는 c 함수를 찾고 있습니다.
lsof
그리고 fuser
이 얘기 할 수 있지만, 그들이 어떤 상황에서이 300ms까지 복용의 결과는 (i MAC OS X에이 코드를 사용할 때처럼, 나는 리눅스와 OS X에 대한 devving있어) 다른 많은 정보를 제공하는 (나는 창문이 5ms가 걸리는 솔루션이므로 Unix에서 매우 빠르며 파일을 사용하는 경우 true 또는 false를 반환합니다.)
답변
이것을 잠금으로 사용하는 경우 경쟁 조건 으로 작동하지 lsof
않거나 fuser
방지 하지 않습니다 .
기본적인 프로세스는 열린 파일 디스크립터를 찾는 lsof
모든 프로세스를 /proc/*/fs
탐색하는 것입니다. 당신이 무엇을하든 시간이 걸릴 것입니다.
이 작업을 직접 수행 할 수 있지만 시스템에서 열려있는 모든 프로세스를 확인해야하기 때문에 속도가 더 빠를 수는 없습니다.
당신이하고있는 일이 시간이 중요하다면, 다른 방법을 찾으십시오.
- 작성한 프로그램을 통해 파일을 제어하는 경우 잠금 파일을 사용하십시오.
- 파일에서 작동하는 일부 명령을 실행중인 경우 해당 명령 / 프로그램이 제공하는 설명서를보고 잠금 파일을 만들 수 없는지 확인하십시오. 실패하면 PID가있는 파일을 만들 수 없는지 확인하십시오. 그런 다음
/proc/<PID>/fs
파일이 현재 열려 있는지 확인하십시오. 하나의 프로세스 만 살펴보면 열린 파일 디스크립터는 모든 파일 디스크립터보다 훨씬 빠릅니다. - 그렇지 않으면 당신을 돕기 위해 당신이하는 일에 대한 자세한 정보가 필요합니다.
주어진 시스템에서 Firefox가 실행 중인지 확인하려는 설명에 추가 정보를 제공했습니다. 가장 좋은 방법은 Firefox의 잠금 파일을 찾는 것입니다. 이들은 Mozilla 위키에 지정된 기본 위치에 저장됩니다 .
예를 들어, Linux에서는 프로그램이 다음을 수행하도록하십시오.
- 위 열고
~/.mozilla/firefox/
디렉토리를. - 로 끝나는 디렉토리를 필터링하여 모든 디렉토리를 나열합니다
.default
. (.default
모든 디렉토리로 크롤링하는 것이 아니라면 모든 프로파일이로 끝나는 것 같습니다 .) - 위의 각 디렉토리에서
lock
또는 이라는 파일이 있는지 찾으십시오.parentlock
. 하나 또는 두 파일이 모두 보이면 Firefox가 열려있는 것입니다.
이 알고리즘은 현재 Windows에서 수행하는 것보다 빠르게 실행되어야합니다.
답변
TL; DR
에서 귀하의 의견 중 하나 , 당신은 상태 :
내 정확한 상황은 다음과 같습니다. 파일 경로가 있습니다. 파이어 폭스가 실행 중이면 잠 깁니다. Firefox가 실행 중인지 여부를 확인하고 싶습니다.
잠금 파일에 대한 원래의 질문은 주어진 사용자에 대해 Firefox가 실행 중인지 확인하고 프로세스 상태를 검사하는 더 쉬운 방법이있을 때 먼 길처럼 보입니다.
검사 과정 상태
주어진 프로세스의 PID를 찾는 더 합리적인 방법 은 procps 패키지 에서 pgrep 을 사용 하는 것 입니다. 예를 들면 다음과 같습니다.
$ pgrep -u $LOGNAME firefox
5671
그런 다음 ps 를 사용하여 PID의 상태를 검사 할 수 있습니다 .
$ ps 5671
PID TTY STAT TIME COMMAND
5671 ? Sl 105:47 /usr/lib/firefox/firefox
또는 다른 균열없이 상태 플래그를 가져옵니다.
$ ps -ho stat $(pgrep -u $LOGNAME firefox)
Sl
하나의 시스템, 위의 하나의 라이너는 지속적으로 완료하는 데 1.4 밀리 초가 걸립니다. 귀하의 마일리지가 다를 수 있습니다.
프로세스 상태 코드
ps (1)의 PROCESS STATE CODES 섹션은 다양한 상태 플래그의 의미를 자세히 설명합니다. Ubuntu 14.04에서 매뉴얼 페이지는 다음과 같이 말합니다.
PROCESS STATE CODES
Here are the different values that the s, stat and state output
specifiers (header "STAT" or "S") will display to describe the state of
a process:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is
being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by
its parent
For BSD formats and when the stat keyword is used, additional
characters may be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads
do)
+ is in the foreground process group