使用fcntl(非阻塞)或某种自定义方式锁定文件。所以我正在使用lsof并检查进程的pid是否在那里。如果lsof返回空白而没有使用它。
但是我脚本中的lsof需要200ms。
在Windows上,当我尝试测试文件是否被锁定时,我只是打开文件,如果错误锁定,则需要5ms。是否有任何替代lsof进行快速测试,看看是否有东西被保存?
答案 0 :(得分:6)
fuser命令是一个非常智能的unix实用程序,用于查找哪个进程正在使用文件,目录或套接字。它还提供有关拥有进程和访问类型的用户的信息。 READ MORE --digitalocean.com
要显示访问特定目录的进程,请使用:
fuser -uvm /somedir
以下输出显示,当以详细模式运行时,fuse实用程序提供有关USER, PID, ACCESS and COMMAND
root@exampleuser-X55CR:~# fuser -v .
USER PID ACCESS COMMAND
/root: root 3378 ..c.. vim
root 3398 ..c.. bash
root 3449 ..c.. bash
root 19370 ..c.. bash
fuser
在识别打开特定文件的进程ID时非常有用。
lsof
可用于查找特定流程打开的所有文件。
有关热熔器的更多选项,您可以查看其手册页man fuser
这里有一些:
]$ fuser
No process specification given
Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
[ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
fuser -l
fuser -V
Show which processes use the named files, sockets, or filesystems.
-a display unused files too
-c mounted FS
-f silently ignored (for POSIX compatibility)
-i ask before killing (ignored without -k)
-k kill processes accessing the named file
-l list available signal names
-m show all processes using the named filesystems
-n SPACE search in this name space (file, udp, or tcp)
-s silent operation
-SIGNAL send this signal instead of SIGKILL
-u display user IDs
-v verbose output
-V display version information
-4 search IPv4 sockets only
-6 search IPv6 sockets only
- reset options
udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]