Answers:
如果您正在使用这个作为一个锁,它不会因为工作没有lsof
或fuser
防止竞争条件。
这样lsof
做的基本过程是遍历所有/proc/*/fs
寻找打开文件描述符的过程。无论您做什么,这都需要时间。
您可以自己执行此操作,但是它可能不会更快,因为您必须检查系统上的每个打开的进程。
如果您的工作时间紧迫,请找出另一种方法。
/proc/<PID>/fs
文件当前是否打开。仅查看一个进程,打开文件描述符比在所有进程中进行映射要快得多。您在注释中提供了更多信息,以便确定Firefox是否在给定系统上运行。最好的方法是查找Firefox的锁定文件。这些存储在Mozilla Wiki上指定的默认位置。
例如,在Linux上,让您的程序执行以下操作:
~/.mozilla/firefox/
目录。.default
。(我认为所有配置文件都以结束.default
,即使不只是爬到每个目录中。)lock
或的文件.parentlock
。如果您看到一个或两个文件,则表明Firefox已打开。该算法的执行速度应该比您当前在Windows上执行的速度更快。
ps aux firefox
。取得这些PID,并在/proc/
文件系统中查找它们。
ps aux firefox
。好吧,我的确切情况是:我有文件的路径。如果Firefox正在运行,它将被锁定。我想看看它是否被锁定,或者说Firefox是否正在运行。
在您的评论之一中,您声明:
好吧,我的确切情况是:我有文件的路径。如果Firefox正在运行,它将被锁定。我想看看它是否被锁定,或者说Firefox是否正在运行。
关于锁文件的最初问题似乎很漫长,因为有更简便的方法可以查找给定用户的Firefox是否正在运行,并检查其进程状态。
找到一个给定的进程的PID一个更明智的方法是使用p纤ep从procps的包。例如:
$ 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)的“过程状态代码”部分详细说明了各种状态标志的含义。在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
~/.mozilla/firefox/*/lock
。然后,您可以通过查看每个锁定文件的父目录名称来标识会话。在其他平台上,这不起作用。我们的聊天内容更多地介绍了如何使其在Mac上运行(这对ubuntu来说无关紧要,但是您已经拥有了)。公平地说,他确实应该将问题更新为更具体。:P