替代lsof - 检测锁定文件

Noi*_*art 4 lsof

使用fcntl(非阻塞)或某种自定义方式锁定文件.所以我正在使用lsof并检查进程的pid是否在那里.如果lsof返回空白而不是没有使用它.

但是我的脚本中的lsof需要200ms.

在Windows上,当我尝试测试文件是否被锁定时,我只是打开文件,如果错误锁定,则需要5ms.是否有任何替代lsof进行快速测试,看看是否有东西被持有文件?

zee*_*zee 6

fuser命令是一个非常智能的unix实用程序,用于查找哪个进程正在使用文件,目录或套接字.它还提供有关拥有进程和访问类型的用户的信息.阅读更多--digitalocean.com

要显示访问特定目录的进程,请使用:

fuser -uvm /somedir
Run Code Online (Sandbox Code Playgroud)

以下输出显示,当以详细模式运行时,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
Run Code Online (Sandbox Code Playgroud)

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]]]
Run Code Online (Sandbox Code Playgroud)